1.自动装箱与拆箱的理解
自动装箱:基本数据类型-->对象类型
自动拆箱:对象类型-->基本数据类型
2.Object与数组的关系
(1).基本数据类型 不属于对象,也不是Object的子类
(2).Object 是数组的父类
不是基本数据类型的父类(基本数据类型不存在对象)
Object obj = new int[3];
但是:int x = 5; Object obj = x;//这里为什么可以呢?
因为x是基本数据类型,不存在对象,Object obj = x,自动装箱功能,将x封装成Integer对象,而Integer是Object的子类!
(3).Object[] p = new int[3];//error
3.自动装箱与拆箱的实例
//声明一个Integer对象,自动的装箱:
Integer num = 10; //Integer num = new Integer(10);
//自动拆箱
Integer num = 10;
System.out.print(num--);
//在-128~127 之外的数
Integer num1 = 128; Integer num2 = 128;
Integer num3 = 97; Integer num4 = 97;
System.out.println("num1==num2: "+(num1==num2)); //false
System.out.println("num3==num4: "+(num3==num4)); //true
java定义:在自动装箱时对于值从–128到127之间的值(共享),它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象,而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象,使用了一种模式:叫享元模式(flyweight)
4.认识java.lang.String类和String池
String类:
1).String类是final的,不可被继承。public final class String
2).String类是的本质是字符数组char[], 并且其值不可改变。PRivate final char value[];。//最大优点:一旦被初始化就不能改变
String池
Java运行时会维护一个String Pool(String池),String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。而一般对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区。
String s1 = new String("abc");//对应两个对象,new String和"abc"(存在于String池中)
String s2 = "abc"; //存在于String池中
s2 = "def"; //"abc"还存在,只不过在池中又多了一个常量
不可改变的字符串具有一个很大的优点:编译器可以把字符串设置为共享。