先看下面的这个例子,读懂这个例子,你就理解了。

publicclass Test {

publicstaticvoid stringReplace (String text) {

text = text.replace('j' , 'i');

}

publicstaticvoid bufferReplace (StringBuffer text) {

text = text.append("C");

}

publicstaticvoid main (String args[]) {

String textString = new String ("java");

StringBuffer textBuffer = new StringBuffer ("java");

stringReplace (textString);

bufferReplace (textBuffer);

System.out.println (textString + textBuffer);

}

}

答案是 javajavaC

这是String参数传递,是不可变的(immutable).

而题目中第七行text = text.append (“C”),append方法会改变text中的值

而这个text与main中的textBuffer是指向同一个对象,所以对应的输出是javac。

string的值永远不会改变!

String a = "a";//假设a指向地址0x0001,

a = "b";//重新负值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的。

从表面上看String类型的对象改变了值,但事实是他不能改变值,只能改变指向的地址

StringBuffer则不同,直接改变指向的地址中保留的值

还有

StringBuffer s1 = new StringBuffer("a");

StringBuffer s2 = new StringBuffer("a");

s1.equals(s2)//为什么是false

String s1 = new String("a");

String s2 = new String("a");

s1.equals(s2)//为什么是true

StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,

而Object类中的equals方法是用来比较地址的,所以等于false.

String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以会是

true。

对于这样能不能面试出真正的水平,感到怀疑。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

String str=new String("HELLO");

String str="HELLO";

以上的区别请说明以下

String str=new String("HELLO");创建了两个对象,一个是"HELLO",然后再用"HELLO"创建一个str引用的对象.

下面的就在创建"HELLO"之后把str指向"HELLO",这样只创建了一个String的实例

~~~~~~~~~~~~~~~~~~~~~~~~~

因此得到的结论是:如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法好了!

也许这就是你的程序的性能瓶颈!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

非可变对象一旦创建之后就不能再被改变,可变对象则可以在创建之后被改变。

String对象是非可变对象,StringBuffer对象则是可变对象。

为获得更佳的性能你需要根据实际情况小心谨慎地选择到底使用这两者中的某一个

一、StringBuffer的equals方法没有覆盖Object的方法,所以StringBuffer a=new StringBuffer("ss");StringBuffer b=new StringBuffer("ss");,生成了两个对象,a.equals(b)=false,比较的是地址。二、等号比较的是地址,String a = "a";String b=a;只生成了一个对象a==b true。StringBuffer a=new StringBuffer("a");StringBuffer b = a; 也是生成一个对象a==b true。三、String a="ss";String b="ss"; a.equals(b)=true a==b true因为也是一个对象。这是因为编译时只产生了一个对象"ss"。String a=new String("ss");String b=new String("ss");a.equals(b)=true,没有疑问,a==b false。因为a,b是在运行时才产生的对象,产生了2个对象。

Java中String 和StringBuffer的区别相关推荐

  1. JAVA中String与StringBuffer的区别

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

  2. java中string 和stringbuffer的区别_Java中的String,StringBuilder,StringBuffer三者的区别...

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

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

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

  4. Java中String、StringBuffer、StringBuilder的区别

    Java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  5. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  6. java中拼接和 的区别_浅析Java中String与StringBuffer拼接的区别

    学习笔记: 1.String拼接会创建一个新的String对象,存储拼接后的字符串: StringBuffer拼接是直接在本身拼接,会即时刷新. 2.String只能拼接String类型的字符串: S ...

  7. Java中String,StringBuffer都是final类

    Java中String和StringBuffer同时final类,它们的区别在哪里 ? final 表示这个类不能再被继承.String不可变是说String中用一个final 的char数组priv ...

  8. JAVA中String与StringBuffer 、StringBuilder的区别

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

  9. java substr函数_oracle 中的substr()函数的用法,以及与java中String.substring()方法的区别...

    oracle 中的substr()函数的规则是 substr( string, start_position, [ length ] ) 说明: string 是要分割的字符串 start_posit ...

最新文章

  1. spring mvc velocity 配置备忘
  2. 经典HTML5学习资源
  3. leetcode -day19 Convert Sorted List to Binary Search Tree
  4. 【Python】青少年蓝桥杯_每日一题_8.01_随机五角星
  5. pythonidea_idea集成python插件
  6. 使用Infinispan进行Camel的事务性缓存
  7. 【LeetCode - 131】分割回文串(dp,dfs)
  8. python 批量读取xlsx并合并_python合并多个excel表格数据-python如何读取多个excel合并到一个excel中...
  9. [转]数据科学家能力发展路线图
  10. 五分钟带你了解前端开发,以及前端开发的发展机会
  11. Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式...
  12. 论文笔记_S2D.54_2020-TIP_用于精确深度估计的无监督多视图约束卷积网络
  13. 在托管 Windows 服务中承载 WCF 服务
  14. 天勤数据结构——绪论
  15. 正则表达式的语法及使用
  16. 解决软件安装的2203报错
  17. 21cn企业邮箱服务器端口号,21cn企业邮箱手机客户端设置--Android
  18. 企业员工全面激励训练整体解决方案 (节选)
  19. 记录下我磕磕碰碰的三个月找工作经历,绝对干货
  20. vs 开发 win32 程序,调出控制台那个黑乎乎的窗口,方便调试

热门文章

  1. [BZOJ 2243] 染色
  2. [USACO06FEB]数字三角形
  3. Codeforces 1344F Piet's Palette (线性代数、高斯消元)
  4. redhat linux下安装oracle10g rac,RedHat 5.5下安装Oracle 10g+RAC
  5. wordpress插件翻译不生效_新的恶意软件利用wordpress插件漏洞攻击数百万网站
  6. linux 目标文件格式,Linux工具 - NM目标文件格式分析
  7. sqlserver中用到的一些方法:convert,isnull
  8. android高级篇收录
  9. 尚学linux课程---8、rpm软件包安装
  10. zookeeper做集群后启动不了,大部分原因是防火墙未关闭