Java数据类型

基本数据类型(四种8个)

种类数据类型大小/位
整形byte8
整形short16
整形int32
整形long64
浮点型float32
浮点型double64
布尔型Boolean8
字符型char16

值得注意的几点:

  1. 整形和浮点型都会有一个默认类型,分别是int和float
  2. int和float的初始值为0,boolean的初始值为false
  3. 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
    
  4. char与int之间通过ASCII码转换

引用类型

  1. 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存储问题:

  1. 堆:是存放所有new出来的对象,每一个对象都会有一个属于自己的地址,也就是说s3和s4的地址不同,但是值相同所以可以使用equals方法进行比较值即可
  2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中
  3. 常量池:存放字符串常量和基本类型常量

问题就是栈和常量池中对象可以共享,而堆中的对象则不可共享,即使值相同,也会重新分配地址。
而string,new出来的对象就会存在堆中,直接定义的就会存在栈中。

引用类型之间的转换只能通过继承关系进行转换否则会出现ClassCastException异常

Q.E.D.