数据类型

整数类型: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来回收



原文地址:https://www.cnblogs.com/128-cdy/p/11517605.html