ps
请先下载Eclipse
https://www.eclipse.org/downloads/
基本类型和JVM的关系
Java运行的条件是JVM(java虚拟机),可以分为
Java的基本数据类型
基本数据类型都存储在栈上面
包装类的引用存储在栈,其对象在堆内。在引用的时候通过栈内存储的地址调用堆进行访问。
包装类型
1.包装类型封装了Java的基本类型,使基本类型也可以成为对象。
2.符合Java面向对象的编程方法,一切皆对象。
3.包装类有基本的操作方法,方便各种操作。
此处用Integer作为例子进行剖析包装类的各种性质
1)装箱
Integer i1 = 10; //Valueof()方法 自动装箱
Integer i2 =(Integer)10;
Integer i3 = new Integer(10);
2)拆箱
int i4 = i1; //intValue()方法 自动拆箱
int i5 = i2.intValue(); //显式拆箱
int i6 = (int)i2; //显式拆箱
针对Integer和Int的这个关系,经常会有判定两个值的情况
Integer int1 = 100;
Integer int2 = 100;
System.out.println("对象比较"+(int1==int2));
//equals 针对于包装类 ,基本类型没有
System.out.println("值比较"+int1.equals(int2));
这个代码运行以后结果为true,true。
当时当
Integer int1 = 130;
Integer int2 = 130;
System.out.println("对象比较"+(int1==int2));
//equals 针对于包装类 ,基本类型没有
System.out.println("值比较"+int1.equals(int2));
这样运行结果又是false,true,就是他们的对象不一样而值一样。
就此问题进行剖析:
对于对象比较无非是比较的两个引用指向的地址是否相当。
对于值的比较
因为值比较比较的是其封装类中封装的基本类型的大小,所以结果都为true
基本数据类型的强制类型转换
byte <(short=char) <int<long<float<double
范围排序
小类型基本都可以自动转化为大类型
隐式转换
//隐式转换
byte a = 10;
int b = a;
long c = a;
强制转换
可以大类型转换小类型
char d = (char)b; //byte --->int---->char
short e = 10;
char f = (char) e;//short到char必须强转(Short具有符号位)
byte g = (byte)128; //必须强转 因为128默认int
//在运算的时候会自动转化为int,所以需要强制类型转换
byte b1 = 10;
byte b2 = 10;
byte b3 = (byte) (b1 + b2);