Java数据类型
java的数据类型分为两类:
1.基本数据类型和引用类型
基本数据类型分为:整型、浮点型,布尔型
引用类型包括: 对象、接口、数组、null
基本数据类型保存的就是变量的值,而引用类型保存的是变量的地址。
比如:int[] a = new int[4]; 这时变量a的值是数组的地址保存在栈上,而具体的数组值保存在堆上 。所以java中没有指针的概念,对象的赋值都是传递的地址。
2.基本数据类型:
2.1 整型
整型有byte short int long char,分别用8、16、32、64、16bits表示。有些地方可能不会把char列入整型范畴,但本质上char类型是int的一个子集。整型的宽度不应该被看成整数所占用的内存空间大小,而应当理解成定义为整型的变量或者表达式的行为。JVM可以自由使用它们希望的、任何大小的内存空间,只要类型的行为符合规范。byte short int long都是有符号的,用2的补码(two‘s-complement)表示。而char用16位表示,它是无符号的,表示的是UTF-16编码集。
byte由1个字节8位表示。取值范围为:[-128, 127].
short用16位表示,取值范围为:[- 2^15, 2^15 - 1]
int 32 bits, [- 2^31, 2^31 - 1].
long 64 bits, [- 2^63, 2^63 - 1,默认值为0L].
char 16 bits, [0, 65535], [0, 2^16 -1],从'\u0000'到'\uffff'。无符号,默认值为'\u0000'。
public class 整型 { byte b; short s; int i; long l; char c; boolean bool; public static void main(String[] args){ 整型 a = new 整型(); System.out.println("b = "+a.b); System.out.println("s = "+a.s); System.out.println("i = "+a.i); System.out.println("l = "+a.l); System.out.println("c = "+a.c); System.out.println("bool = "+a.bool); } }
结果:
2.2浮点型
浮点型默认是double,5.12就是double类型
float 32 bit表示
double 64bit表示
float a = 10.2f/F
double d = 10.2(d/D)
默认值:0.0
** float num=3.14;//是错误的,3.14默认double类型。
2.3 boolean
boolean类型只有两个值true和false,默认为false。
3.基本数据类型之间的转换
首先将7种类型按下面顺序排列一下:
byte <(short=char)< int < long < float < double (如果从小转换到大,可以自动完成,而从大到小,必须强制转换。short和char两种相同类型也必须强制转换。)
转换分为自动转换和强制转换。对于自动转换(隐式),无需任何操作,而强制类型转换需要显式转换,即使用转换操作符(type)。首先将7种类型按下面顺序排列一下:
4.表达式中的自动类型提升
除了赋值以外,表达式计算过程中也可能发生一些类型转换。在表达式中,类型提升规则如下:
》所有byte/short/char都被提升为int。
》如果有一个操作数为long,整个表达式提升为long。float和double情况也一样。
例如:
short value=5;
value = value-2;//value将自动升级到int类型,再赋值给value就会出错!value是short类型,需要强制转换。