linpyi 2008-08-15 15:46
浏览 223
已采纳

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: abcdefghixyz
get StringBufffer 2 from Hashtable: abcdefghi
get StringBufffer 3 from Hashtable: abcdef
get StringBufffer 4 from Hashtable: abc

  • 写回答

2条回答 默认 最新

  • iteye_17163 2008-08-15 17:20
    关注

    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,楼主可以自己去搜一下相关的资料.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘