String表示的是字符串常量,String类中内容一旦被初始化,其内容和长度就不能被更改

说到这里,可能有人就会疑惑了 (不是可以通过String类的replace()等方法来改变其内容和长度?)

String str = "abc";
System.out.println(str.replace("b", "12345"));
输出结果:a12345cString str = "abc";
str = "aaaa!";
System.out.println(str);
输出结果:aaaa!

这里的字符串长度和内容不是都已经该变了吗,那岂不是和 String 类的特性相违背了

其实这里的改变并不是真正的改变,改变后的字符串是属于一个新的字符串对象,为什么这样说呢?

因为 String 内部被 final 修饰,在 String 对象初始化时,内存就会为其分配一个空间用于存储它的值,在执行str = “aaaa!”;语句后。内存就会将其作为一个新的 String 对象重新为其分配一处空间来存储它的值,而原来的 String 对象的值还存在于内存中,没有发生任何改变。

那为什么输出的结果是“aaaa!”而不是“abc”?

因为 str 只是一个 String 对象的引用指向,开始时指向"abc"存储地址,在创建了新的String对象后,该指向就指向了这个新的 String 值"aaaa!“的存储地址。所以输出的结果是"aaaa!” 而不是"abc"

String 和 StringBuffrer 的区别

StringBuffer 类弥补了 String 类的内容不能被修改的这个不足之处,StringBuffer 类(又称字符缓冲区)表示的字符容器,其内容及长度可以被修改的,修改后不会产生新的 StringBuffer 对象.

<f String 类覆盖了 Object 类的 equals() 方法,而 StringBuffer 类没有.

String s1 = "好好学习!";
String s2 = "好好学习!";
System.out.println(s1.equals(s2));
StringBuffer sb1 = new StringBuffer("天天向上!");
StringBuffer sb2 = new StringBuffer("天天向上!");
System.out.println(sb1.equals(sb2));输出结果:
true
false

String 类可以通过 '+'号对两个 String 对象进行拼接,而 StringBuffer 类不可以.

String s1 = "好好学习,";
String s2 = "天天向上!";
System.out.println(s1 + s2);  //输出结果:好好学习,天天向上!
StringBuffer sb1 = new StringBuffer("好好学习,");
StringBuffer sb2 = new StringBuffer("天天向上!");
System.out.println(sb1 + sb2); //此处报错

String 和 StringBuffrer 的区别相关推荐

  1. String与StringBuffer的区别

    String与StringBuffer的区别 简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改:而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象. St ...

  2. String,StringBuffer和StringBuilder区别?

    String是字符串常量,final修饰;StringBuffer字符串变量(线程安全);StringBuilder 字符串变量(线程不安全).此外StringBuilder和StringBuffer ...

  3. JAVA中String与StringBuffer的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

  4. String和StringBuffer的区别,String长度是固定的?

    String和StringBuffer的区别,String长度是固定的? 区别: 1. String类字符串的长度是固定的,StringBuffer类字符串的长度是可变的.因为String改变的是地址 ...

  5. CString与string、char*的区别和转换

    我们在C++的开发中经常会碰到string.char*以及CString,这三种都表示字符串类型,有很多相似又不同的地方,常常让人混淆.下面详细介绍这三者的区别.联系和转换: 各自的区别 char*: ...

  6. Java中string与String区别_JAVA中String与StringBuffer的区别

    JAVA中String与StringBuffer的区别 2009-12-3文字大小:大中小 在java中有3个类来负责字符的操作. 1.Character 是执行 单个字符操作的, 2.String ...

  7. Java中stringbutter_java中string与ButterString的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

  8. javascript中数据类型及转换、String()和toString()的区别

    数据类型: JavaScript中的数据类型: 在计算机中,不同的数据类型所占的储存空间是不同的.1.原始数据类型:number (数字).string(字符串).boolean(布尔值).null( ...

  9. string 与stringbuilder的区别

    string 与stringbuilder的区别 C#   String   对象是不可改变的.每次使用   System.String   类中的方法之一时,都要在内存中创建一个新的字符串对象,这就 ...

最新文章

  1. 你会为情怀买单么?反正我会!
  2. python【蓝桥杯vip练习题库】ALGO-236大小写转换
  3. linux shell 脚本 2,理解Linux Shell和基本的Shell脚本(2)
  4. 对Java Inputstream的一次采访
  5. zigbee cc2530地址空间 layout 和flash操作
  6. 老布特木糖醇蛋卷鸡蛋味
  7. 获取要素集中字段的唯一值
  8. 匹配IP的正则表达式
  9. C#:Interval Helper
  10. Ping记录时间的方法
  11. Python 文件编码问题解决
  12. rsync通过服务同步、linux日志、screen工具
  13. c++ list排序_STL之list
  14. 视觉SLAM笔记(51) 非线性系统和 EKF
  15. 程序小白天天打卡(函数模板)
  16. IT菜鸟最实用的网站,只要不造轮子,都能解决。
  17. 电脑:键盘快捷键的更改(主要以dell笔记本电脑为模拟对象)
  18. outlook 签名_如何在Outlook 2013中创建新签名
  19. 2022年10个最佳URL缩短器:URL缩短器替代方案
  20. ERROR: Cannot install keras==2.2.0 and tensorflow==1.14.0 because these package versions have confli

热门文章

  1. 万年历查询系统理解与功能增添
  2. mysql之事件的开启和调用
  3. .net自带的IOC容器MEF使用
  4. Canny边缘检测及C++实现
  5. 基于插件架构的简单的Winform框架(下)
  6. ASP.NET 4.0 无法加载 System.ServiceModel.Activation.HttpModule
  7. 送一点GMail的邀请
  8. DataGrid中加入CheckBox,并实现单选
  9. create-react-app入门教程
  10. day4作业(基本运算流程if for)