Java数据类型
基本数据类型(四种8个)
种类 | 数据类型 | 大小/位 |
---|---|---|
整形 | byte | 8 |
整形 | short | 16 |
整形 | int | 32 |
整形 | long | 64 |
浮点型 | float | 32 |
浮点型 | double | 64 |
布尔型 | Boolean | 8 |
字符型 | char | 16 |
值得注意的几点:
- 整形和浮点型都会有一个默认类型,分别是int和float
- int和float的初始值为0,boolean的初始值为false
- byte , short , int , long, float , double
高位向低位转换需要进行强制类型转换,但是要注意低位变量的可表示数据范围byte(-128~127)、short(-32768~32767)、int(-2147483648~2147483647)
而低位向高位则直接转换eg:long b2 = 1244; byte b3 =(byte)b2; System.out.println(b3);//-36
- char与int之间通过ASCII码转换
引用类型
- class 2. interface 3. 数组4.枚举5.注解
值得说的是引用类型的比较,先看代码
public static void main(String[] args) {
String s1 = "123";
String s2 = "123";
System.out.println(s1 == s2); // true
System.out.println("----");
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3 == s4); // false
}
可以看出对于引用类型,也就是s3s4这种new出来的值,用“==”是不相等的
因为“==”在引用类型中比较的是地址而不是值。
这关系到Java存储问题:
- 堆:是存放所有new出来的对象,每一个对象都会有一个属于自己的地址,也就是说s3和s4的地址不同,但是值相同所以可以使用equals方法进行比较值即可
- 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中
- 常量池:存放字符串常量和基本类型常量
问题就是栈和常量池中对象可以共享,而堆中的对象则不可共享,即使值相同,也会重新分配地址。
而string,new出来的对象就会存在堆中,直接定义的就会存在栈中。
引用类型之间的转换只能通过继承关系进行转换否则会出现ClassCastException异常
Q.E.D.