String引用类型的一些特性

由于学String类型的时候踩了不少坑,也参考了很多网上的资料,所以也想简单做个总结。有什么不对的地方,希望大家见谅,大家也可以一起交流交流。
首先,String其实是被final修饰的一个类,是一个底层用char[]字符串数组实现对字符串进行一系列操作的类,也相当于对char[]数组封装的一个类,提供了很多方法操作char[]数组。
那么String有哪些特俗的特性:
1.String创建值不会改变,也就是一旦创建,不再改变。
比如:String name=“xyz”;
name = name+“abc”;
String 创建的引用name 遇上 +(字符串拼接符) 不会在原来的值上拼接 ,实际上是在常量池建了一个新的内存空间“xyzabc”,name的引用指向新的内存空间,原来的“xyz”地址现在没有引用,变成垃圾。这样的操作会产生很多内存垃圾。
一旦一个字符串在内存(堆)中被创建,它就不可以被修改。我们应该记住这一点,String的所有所有方法都不能够修改它本身的字符串,但是,可以返回一个方法操作之后的新字符串。 如果我们需要可以修改的字符串,我们应该使用StringBuffer或者StringBuilder(jdk1.8版本优化了+字符拼接符,实现底层默认使用StringBuffer或者StringBuilder)。
2.String 通过new关键字创建带参数的对象,可能会产生两个对象
String str2 = new String(“hello”);
首先会声明String s 在栈中开辟内存声明 s, new String(“xyz”) 是引用数据类型 在堆中创建String实例,由于String的值比较特殊。所以会先在常量池中寻找是否有xyz如果有直接引用, 没有就在常量池创建xyz然后赋值给堆中的对象。
3.(原来Obiect类中,equlas方法比较的也是内存地址值)
String类型重写了 equlas()方法,比较的是字符串的值。
String内存图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值