关于变量和数据类型
在Java中,变量分为两种:基本类型的变量和引用类型的变量
在Java
中,变量必须先定义后使用,在定义变量时可以给它一个初始值。例如:
int x =1
上述定义了一个整型int
类型的变量 ,名称为x
,初始值为1
不写初始值时,就相当于给它指定了默认值。默认值是0
变量可以反复赋值
基本数据类型
- 整数类型: byte,short, int , long
- 浮点数类型 : float, double
- 字符类型: char
- 布尔类型: boolean
计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二进制数,即8个bit.它的二进制表示范围是从00000000
`11111111`,换算成十进制是0255,换算成十六进制是00
~ff
.
内存单元从0开始编号,称为内存地址。
一个字节是1 byte,1024字节就是1K,1024K就是1M,1024M是1G,1024G是1T.
那么一个拥有4T内存的计算机的字节数是
4T = 4 * 1024G
= 4 * 1024 * 1024M = 4 * 1024 * 1024* 1024K
= 4 * 1024 * 1024* 1024 * 1024
不同数据类型占用的字节数不一样,Java基本数据类型占用的字节数:
整型
对于整型类型,Java只定义了带符号的整型,因此,最高位的bit 表示符号位(0表示整数,1表示负数)。
如下:
- byte :-128~127
- short : -32768 ~ 32767
- int : -2147483648~ 2147483647
- long: -9223372036854775808~9223372036854775807
public class Main {
public static void main(String[] args) {
int i = 2147483647;
int i2 = -2147483648;
int i3 = 2_000_000_000; // 加下划线更容易识别
int i4 = 0xff0000; // 十六进制表示的16711680
int i5 = 0b1000000000; // 二进制表示的512
long l = 9000000000000000000L; // long型的结尾需要加L
}
}
特别注意:同一个数的不同进制的表示是完全相同的,例如:15
=oxf
=ob111
浮点型
浮点类型的数就是小数
float f1 = 3.14f;
float f2 = 3.14e38f; // 科学计数表示的3.14*10^38
double d = 1.79e308;
对于float
类型,需要加上f
后缀
浮点数可表示的范围非常大,float
类型可最大表示3.4×1038,而double
类型可最大 表示1.79× 10308
布尔类型
布尔类型boolean
只有true
和false
两个值,布尔类型总是关系运算的结果:
boolean b1 = true;
boolean b2 = false;
boolean isGreater = 5 > 3; // 计算结果为true
通常JVM内部会把boolean
表示为4字节整数
字符类型
字符类型char
表示一个字符.Java
的char
类型除了可表示标准的ASCII外,还可以表示一个Unicode字符:
//字符类型
public class Main {
public static void main(String[] args) {
char a = 'A';
char zh = '中';
System.out.println(a);
System.out.println(zh);
}
}
A
中
注意:char
类型使用单引号'
,且仅有一个字符,要和双引号"
的字符串类型区分开
引用类型
除了上述基本类型的变量,剩下的都是引用类型。例如,引用类型最常用的就是String
字符串:
String s = "hello";
引用类型的变量类似于C语言的指针,它内部存储一个“地址”,指向某个对象在内存的位置
常量
定义变量的时候,如果加上final
修饰符,这个变量就变成了常量:
final double PI = 3.14 ; // PI 是一个常量
double r = 5.0;
PI = 300; // compile error!
常量在定义时进行初始化后就不可再次赋值,再次赋值会导致编译错误
常量的作用时用有意义的变量名来避免魔术数字(Magic number) ,例如,不要在代码中到处写3.14
,而是定义一个常量。如果将来需要提高计算精度,我们只需要在常量的定义处修改,例如,改成3.1416
,而不必在所有地方替换3.14
根据习惯,常量名通常全部大写
var 关键字
有些时候,类型的名字太长,写起来比较麻烦。例如:
StringBuilder sb = new StringBuilder();
这个时候,如果想要省略变量类型,可以使用var
关键字:
var sb = new StringBuilder();
编译器会根据赋值语句自动推断处变量sb
的类型是StringBuilder
;并且使用变量名只是少写了变量类型而已