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

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

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值