String 和 StringBuffer

问题描述

看了一些JAVA引用,CLONE,看了有点然后看底下StringBuffer 和 String public static void main(String[] args){ Hashtable ht = new Hashtable();// StringBuffer sb = new StringBuffer();// sb.append("abc,");// ht.put("1",sb); // sb.append("def,");// ht.put("2",sb);// sb.append("mno,");// ht.put("3",sb);// sb.append("xyz.");// ht.put("4",sb); String sb = ""; sb+= "abc"; ht.put("1",sb); sb+="def"; ht.put("2",sb); sb+="ghi"; ht.put("3",sb); sb+="xyz"; ht.put("4",sb); int numObj=0; Enumeration it = ht.elements(); while(it.hasMoreElements()){ System.out.print("get StringBufffer "+(++numObj)+" from Hashtable: "); System.out.println(it.nextElement()); } }上下2个方法,StringBuffer和String都是对象,如果按传递的都是地址来说,答案应该都一样上面运行get StringBufffer 1 from Hashtable: abc,def,mno,xyz.get StringBufffer 2 from Hashtable: abc,def,mno,xyz.get StringBufffer 3 from Hashtable: abc,def,mno,xyz.get StringBufffer 4 from Hashtable: abc,def,mno,xyz.下面get StringBufffer 1 from Hashtable: abcdefghixyzget StringBufffer 2 from Hashtable: abcdefghiget StringBufffer 3 from Hashtable: abcdefget StringBufffer 4 from Hashtable: abc

解决方案

String是一个final修饰的类.这就证明它是不可改变的.所以生成的String对象也是不可改变的.你所看到的String的连接操作.String str = "abc";sb+= "def"; 实际上是先生成了一个名为str的String引用,指向了"abc"这个字符串对象.sb+= "def";就是生成了一个"abc"对象.然后将"def"与"abc"两个对象连接的值"abcdef",生成一个新的String对象.再让str指向新生成的String对象.所以String每次进行+=操作,都会新生成一个String的对象.由于StringBuffer不是final修饰的,所以StringBuffer的引用对象值可以直接改变.所以每次操作,都是同一个对象.对于为何String修饰为final,楼主可以自己去搜一下相关的资料.
解决方案二:
请看臧圩人几篇blog:1, JAVA面试题解惑系列(二)——到底创建了几个String对象?http://zangweiren.iteye.com/blog/2098952, JAVA面试题解惑系列(五)——传了值还是传了引用?http://zangweiren.iteye.com/blog/2143693, JAVA面试题解惑系列(六)——字符串(String)杂谈http://zangweiren.iteye.com/blog/216005自然就可以找到答案.

时间: 2024-09-19 20:43:24

String 和 StringBuffer的相关文章

提高String和StringBuffer性能的技巧

技巧|性能 String和StringBuffer之概览 创建字符串的较佳途径 滞留字符串带来的优化 连接字符串时的优化技巧 借助StringBuffer的初始化过程的优化技巧 关键点 String和StringBuffer之概览 非可变对象一旦创建之后就不能再被改变,可变对象则可以在创建之后被改变.String对象是非可变对象,StringBuffer对象则是可变对象.为获得更佳的性能你需要根据实际情况小心谨慎地选择到底使用这两者中的某一个.下面的话题会作详细的阐述.(注意:这个章节假设读者已

JAVA中String与StringBuffer有什么区别

String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作: 1.Character 是进行单个字符操作的. 2.String 对一串字符进行操作,不可变类. 3.StringBuffer 也是对一串字符进行操作,但是可变类. String: 是对象不是原始类型. 为不可变对象,一旦被创建,就不能修改它的值. 对于已经存在的String对象的修改都是重新创建一个新的

java的String和StringBuffer类

这里总结一下同时适用于String和StringBuffer的方法,以便对它们相互间的沟通方式有一个印象.这些表格并未把每个单独的方法都包括进去,而是包含了与本次讨论有重要关系的方法.那些已被覆盖的方法用单独一行总结. 首先总结String类的各种方法: 方法 自变量,覆盖 用途 构建器 已被覆盖:默认,String,StringBuffer,char数组,byte数组 创建String对象 length() 无 String中的字符数量 charAt() int Index 位于String内

java字符串连接String、StringBuffer和StringBuilder

Java字符串连接再开发中随时用的,方法很多: 先看下下边的代码: package com.meiyabaike.classx; public class ClassxMathCalculate { public static void main(String[] args) { int i1 = 10; int i2 = 20; System.out.println("resultx1 :"+i1+i2); //Error: the operator - is undefined f

深入理解String、StringBuffer、StringBuilder(转)

文章系转载,非原创,原地址:  http://www.cnblogs.com/dolphin0520/p/3778589.html 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String.StringBuilder和StringBuffer这几个类,分析它们的异同点以及了解各个类适用的场景.下面是本文的目录大纲: 一.你了解String类吗? 二.深入理解String.StringBuffer.StringBuilder

String、StringBuffer、StringBuilder区别

无论是做Java或是Android,都避免不了遇到这个问题,其实开发过程中一般情况下是不会纠结,这个问题是面试必选经典题,今天有时间,就总结一下. String.StringBuffer.StringBuilder区别 StringBuffer.StringBuilder和String一样,也用来代表字符串.String类是不可变类,任何对String的改变都 会引发新的String对象的生成:StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象.既然可变和不可变都

java-Java中string和stringbuffer有什么区别???

问题描述 Java中string和stringbuffer有什么区别??? Java中string和stringbuffer有什么区别???求各位前辈指点 解决方案 String,StringBuilder,StringBuffer都实现了CharSequence接口. Java中的String是不可变的,即它本身没有提供改变自身的方法,它的看似改变的方法都是返回一个新的字符串,在多个字符串(含变量)做连接操作(即"+")时,它内部会使用StringBuilder.append操作,最

String、StringBuffer、StringBuilder的区别

String.StringBuffer.StringBuilder的区别 理论(这几个东西的区别是啥?)---先不说话我们先上代码,不管懂不懂,先照抄! package com.sandy; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.util.Iterator; /** * Created by alittlefish on 2017/8/17. */ pu

[Java] String、StringBuffer与StringBuilder区别和联系(源码)

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! String public final class String extends Object  implements Serializable, Comparable, CharSequence  String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因为 String 对象是不可变的,所以可以共享.例如: S

深入剖析java中String、StringBuffer、StringBuilder的区别_java

java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1. 可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有"final"修饰符,所以可以知道string对象是不可变的. private final char value[]; StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在