整数类型:byte(1) short(2) int(4) long(8)
字符类型:char(2) 用单引号括起来,例如'a'; java采用 Unicode字符集。
浮点类型:float(4) double(8)
布尔类型:boolean(ture ,false ),未规定其所占字节。
具体的转换规则:byte-->short(char)-->int-->long-->float-->double, 也就是说byte类型的变量可以自动转换成short类型,short类型可以自动转换成int类型等等。
注意:在整数之间进行类型转换时,数值不发生改变,而将整数类型(特别是大整数类型)转换成较小数类型时,由于存储方式不同,可能造成数据精度的丢失。
强制类型转换:是从存储范围大的数据类型转换到存储范围小的数据类型。
例如:
double b = 30.10;
int n = (int)b;
System.out.println(n);
输出30.
short a = 10;
a = a +10;//编译不会通过,编译器不会自动将int类型的10 转换成short类型;
a+=10;<===>a = (short)(a+10);//不会报错
2.引用类型:数组,枚举,类,注解等。
3.简单类型所对应的引用类型:
byte -> Byte short -> Short int ->Integer long ->Long float ->Float double ->Double char ->Character boolean ->Boolean
简单类型定义的变量,存放在栈中,并且存放的都是数值,引用类型定义的变量中(new出来的对象)存放在堆中,并且存放的都是其地址。
该程序上面输出为ture;下面输出为false。
该程序的结果为ture.其原因是包含了intValue()方法,有一个(拆包)的过程。
该程序输出为ture.虽然是引用类型存放的为地址,其中包含着一个处理过程Integer.valueOf()的处理(装包)过程。在该方法中存在一个对象池,存放着Integer.valueOf(-128~127)的对象,所以其地址是相同的。超出-128~127的范围,会创建新的对象。
该程序输出为false。其为不同的两个对象,一个是在对象池中的,另一个为new的对象。
栈内存何时创建和回收?定义该变量的时候被创建,出了函数的右括号,内存就被回收
堆内存何时创建和回收?new后就在堆里创建了该对象的内存地址,如果么有什么引用这个地址,就靠垃圾回收机制GC来回收