java里一共有八大数据类型 boolean(未定) char(2字节) byte(1字节) short(2字节) int(4字节) long(8字节) float(4字节) double(8字节),还有与之对应的包装类 Boolean Character Byte Short Integer Long Float Double, 基本数据与包装类之间的转换叫做装箱与拆箱
Integer i = new Integer(10);//装箱这个在java1.5之前只能这样new一个出来 Integer i1 = 10;//java1.5之后可以直接这样初始化一个integer对象出来; Integer j = new Integer(10); int k = j; //这叫做拆箱
int i 与Integer i 到底有什么区别呢,看程序:
Integer n1 = 127; Integer n2 = 127; Integer n3 = new Integer(10); Integer n4 = 10; System.out.println(n1.equals(n2)); System.out.println(n1==n2); System.out.println(n3==n4); System.out.println(n3.equals(n4));
结果是true
true
false
true
java里"=="比较的是对象的地址,而equal比较的是内容,n3与n4比较的结果不以外,那么为什么n1跟n2 "=="比较也是true呢,看数值127 是byte的最大值,java里对于byte范围的数据因为使用多,所以这个对象会放到内存中保存,n1与n2指向的是同一个内存地址,但是超过127或者小于-128结果就是
Integer n1 = -129; Integer n2 = -129; Integer n3 = new Integer(10); Integer n4 = 10; System.out.println(n1.equals(n2)); System.out.println(n1==n2); System.out.println(n3==n4); System.out.println(n3.equals(n4));
true
false
false
true
包装类有一些常用的方法,主要就是数据类型转换,除了boolean char之外的构造方法除了构造方法有两种,不过Float有三种。
数制转换方法,用Integer做例子。byteValue();doubleValue();floatValue;intValue;shorValue;这些方法都是拆箱,返回的都是基本数据类型。
反过来 valueOf(int i)是放回包装类的。
ps:基本数据类型转换遵循的原则:
1 容量小的类型自动转换成容量大的数据类型,数据类型按照容量大小排序是
byte,short,char<int<long<float<double; 注意这是是容量大小不是所占字节数
2 容量大的数据类型转换成容量小的数据类型时,要加上强制转换符,但是可能造成精度降低,或者溢出。
3 有多种数据类型混合运算是,系统将自动所有数据转换成最大的那个类型,然后进行运算。
4 实数常量,系统默认为double;
5 整数常量,系统默认为int;
所以long lg = 10000000000l;后面要加一个l,不然系统会保存因为默认为int就超出范围了