Java_自动装箱_自动拆箱和String常量池(享员模式应用)

本博文为子墨原创,转载请注明出处!
http://blog.csdn.net/zimo2013/article/details/8932855

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"还存在,只不过在池中又多了一个常量
     不可改变的字符串具有一个很大的优点:编译器可以把字符串设置为共享。

 

你可能感兴趣的:(String,拆箱,享元模式,装箱)