JAVA中的String类,Object类,包装类。

  在JAVA中,有三个比较特殊的类,分别是String类,Object类,包装类。它们是三个的特殊之处各不相同的类,

容我在后文一一介绍。

1.String类:

String类有两种实例化方式,分别为直接赋值和构造方法赋值。

例如:

String str1="Hello World";

String str2=new String ("Hello World");

当用 ==比较时,输出的是false。但用equals方法比较时,输出的却是true。

当用==比较时,比较的是两个字符串的地址。用equals方法比较的是两个字符串的内容。

导致这种结果的原因是两种实例化方试有本质的区别,

        直接赋值没有开辟新的堆内存,原因是String类的设计使用了共享设计模式,在JVM底层会自动维护一个对象池,

如果采用直接赋值的模式进行String类的对象实例化操作,该实例化对象会自动保存到这个对象池之中。并且下次使用

的时候直接引用即可。

       所以两者主要区别为:

      1. 直接赋值:只会开辟一块堆内存空间,并且该字符对象可以自动保存在对象池中以供下次使用。

      2.构造方法:会开辟两块堆内存,其中一块成为垃圾空间,不会自动保存在对象池中,可以使用intern()

    方法手工入池。

    

     字符串常量是不可变更的,修改字符串的内容,实际是重新开辟了空间,将修改后的内容放进去,此操作会产生垃圾空间。

     为了方便修改字符串,提供了StringBuffer类,而且不会产生大量的垃圾空间。

     需要注意的是在String中使用+来进行字符串连接,而在StringBuffer类中,需要用append()方法。

  2. Object类:

      Object是所有类的默认父类,即所有类的对象都可以使用Object进行接收。

      因为Object是所有类的父类,可还可以接收所有的引用数据类型,包括:类、数组、接口。

   3.包装类:

      在Java中数据类型分为基本数据类型和引用数据类型,Object类可以接收所有引用数据类型,包装类就是

将基本数据类型封装到类中,让object来接收。

   包装类与基本数据类型处理之中存在两个概念:

   装箱:将基本数据类型变为包装类的对象,利用每一个包装类提供的构造方法实现装箱处理。

   拆箱:将包装类中包装的基本数据类型取出。

      

Integer num=new Integer(55);//装箱
int data=new.intvaule();//拆箱

//自动装箱
Integer x=55;
当装箱的数据进行比较是,最好用 equals方法比较,因为 Integer var= ? 在-128到127之间赋值,Integer对象在IntegerCache.cache产生,会复用对象,这个区间内的Integer值可以直接用==判断。这个区间以外的所有数据,会在堆上产生,并不会复用对象。  由于==比较的是地址,因此即使数值一样,地址不同,也会是false。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值