心有多大舞台便有多大

Embrace changes, pursue excellence, share niceness.

String,简单又复杂


String a = "abc";
String b = "abc";
Assert.assertTrue(a == b);
String c = "abcdefg";
String d = c.substring(0, 3);
Assert.assertFalse(a == d);
a == b这个比较好理解,因为在编译的时候会产生一个静态对象“abc”, 执行a = "abc"和b = "abc"的时候,只是把这个静态对象赋给了a和b,所以两个对象的引用相同,a==b
但是,d的值为"abc"字符串,为什么jvm不把静态的"abc"的引用赋给d对象呢?
我的理解是:String a = "abc"; String b = "abc";这两行代码是在解释执行之前编译成字节码的时候,"abc"就放在常量池中了,所以在执行的时候a和b指向同一个引用,而String d = c.substring(0, 3);是在执行的时候才给d对象赋值"abc",所以这个"abc"应该是放在堆中.
还是想的不明白.

posted on 2008-04-14 11:26 pony 阅读(301) 评论(1)  编辑  收藏 所属分类: Java

评论

# re: String,简单又复杂[未登录] 2008-04-15 15:14 pony

今天看String的源码,发现有个方法:format(String format, Object ... args)
这个方法挺不错!呵呵
一般我们要打印一个提示信息的话,可能是:
System.out.println("test1" + var1 + "test2" + var2);
而用这个方法的话,就变为:
System.out.println(String.format("test1 %s test2 %s", var1, var2));
这对c程序员应该是很熟悉了!  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: