【Java】String类详解 2022年最新版 在线更新

String类

  • String是用于保存字符串的(字符序列)
  • 字符串是用双引号包裹的字符序列
  • 字符串使用Unicode字符编码,一个字符占俩字节,一字节八位
  • String是final类不可继承

在这里插入图片描述

Serializable保证串行化

Comparable保证可以比较

1.创建方式

基本创建有两种类型

  1. String s = “a”;
    • 从常量池中寻找字符串"a",如果有直接指向,如果没有则在常量池创建"a",然后直接指向新出创建的"a"
    • 直接指向常量池
  2. String s = new String(“a”);
    • 先在堆中创建空间,如果常量池中有"a",则堆空间中的value属性指向常量池中的"a",如果没有"a",则在常量池创建"a",然后value属性指向新出创建的"a"
    • 先指向堆空间,堆空间value属性指向常量池
String s = "ab";
String s1 = new String("ab");
System.out.println(s);//ab
System.out.println(s1);//ab
System.out.println(s == s1);//false
System.out.println(s.equals(s1));//true
System.out.println(s == s1.intern());//true

equals()方法——判断值

public boolean equals(Object anObject)将此字符串与指定对象进行比较。 其结果是true当且仅当该参数不是null并且是String对象,表示相同的字符序列作为该对象。
重写:
equals在 Object
参数
anObject - 对比这个 String的对象
结果
true如果给定的对象代表一个 String等效于这个字符串, false否则
另请参见:
compareTo(String) , equalsIgnoreCase(String)

intern()方法——返回常量池地址

public String intern()返回字符串对象的规范表示。
最初为空的字符串池由String类String 。

当调用intern方法时,如果池已经包含与equals(Object)方法确定的相当于此String对象的字符串,则返回来自池的字符串。 否则,此String对象将添加到池中,并返回对此String对象的引用。

由此可见,对于任何两个字符串s和t , s.intern() == t.intern()是true当且仅当s.equals(t)是true 。

所有文字字符串和字符串值常量表达式都被实体化。 字符串文字在The Java™ Language Specification的 3.10.5节中定义。

结果
一个字符串与该字符串具有相同的内容,但保证来自一个唯一的字符串池。

2.字符串特性

  1. String是一个final类,代表不可变字符序列
  2. 字符串不可变,对象一旦分配,内容不可变,改变的是指向地址

3.注意事项

String a = “he”+“llo”;创建了一个对象,等价于String a = “hello”;

String a = “he”;

String a1 = “llo”;

String a2 = a + a1;

并不是二者相加直接放入常量池,而是创建StringBuilder对象

子类无参调用父类有参构造,默认长度16

创建之后将a,a1分别调用append方法,再在父类中拼串返回

最后StringBuilder转换String

并不是两个字符串的常量池直接拼接,而是创建StringBuilder对象,字符串拼接后,再转为String对象。

最后是a2指向堆,value属性指向常量池

String a = "he";
String a1 = "llo";
String a2 = "hello";
String a3 = a+a1;
System.out.println(a3);//hello
System.out.println(a2 == a3);//false
System.out.println(a2 == a3.intern());//true

4.结尾

求点赞 求评论 求收藏 求分享 求关注

img

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就爱喝菠萝啤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值