java基础——对String的理解

String 代表不可变的字符序列(笔记)

  • String 类型 常量池, 唯一一个可以直接String t1 = “abc” 而不需要new 的类,自面量的概念,常量池,String
    a1= “abc” 和String a2 = “abc” a1 和 a2 是使用同一块内存的,都是abc。
  • 当对现有的字符串进行重新操作的时候,需要新指定新的内存区域进行赋值,不能在原有的基础上进行赋值。
  • String a = “abc” a += “def”;现在的a和原来的a不在同一块内存区域。但是现在的a指向了新的区域。a现在的值是abcdef
  • 不可以在原来的内存区域上进行修改,这就是String的不可变性。
  • String 也可以使用new 的方式进行赋值,String s1 = new
    String()(毕竟String也是一个类啊!!!但是被final修饰了。)本质上this.value = new char[0].
 String str1 = “abc” 
 String str2 = new String(“abc”)
 String str3 = new String(“abc”)
  1. str1是通过字面量的方式进行定义的。此时的str1是声明在方法区中的字符串常量池中的。
  2. str2是使用new 构造器的方式进行声明的,是数据在堆空间中开辟新的空间。 str2 和 str3
  3. 的abc值存放在堆空间中,在栈中存放的是两个abc的地址。
    在这里插入图片描述
    String s = new Strng (“abc”)创建了几个对象。
    一个是堆空间中new 的结构,另一个是char[]对应的常量池中的数据“abc”

迷惑行为大赏(笔试题!)
结论:
s3 和 s4 是相当于字面量的连接 所以是true,只要有变量名参与了,此时就不是在常量池中了。需要在堆空间中创建新的变量。(相当于new)

String s8 = s5.intern();
s3 == s8 //true
只要调用了intern方法返回的值就一定要在常量池中声明。
所以s3 的地址和s8 一样。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值