分享:一道BT试题

szlhj 2007-01-13 09:28:28
近日,在下到某公司面试,满怀信心的我重重的载在那份BT试题上。
其中一道:
以下code生成几个String对象
String a="abc";
String b="abc";
String c=new String("abc");
String d=c.intern();

当时在下毫不忧郁的选3。
后来在Java Language Specification/CHAPTER 3/Lexical Structure发现这样一个测试代码,知道错了。

package testPackage;
class Test {
public static void main(String[] args) {
String hello = "Hello", lo = "lo";
System.out.print((hello == "Hello") + " ");
System.out.print((Other.hello == hello) + " ");
System.out.print((other.Other.hello == hello)+"");
System.out.print((hello == ("Hel"+"lo")) + " ");
System.out.print((hello == ("Hel"+lo)) + " ");
System.out.println(hello == ("Hel"+lo).intern());
}
}
class Other { static String hello = "Hello"; }

学海无崖,顿感羞愧,特此分享。
...全文
1407 点赞 收藏 53
写回复
53 条回复
LemonSharpCamel 2008年03月24日
复杂啊复杂
回复 点赞
hacker107 2008年03月19日
明白了

package lucifer.study;
public class Demo
{
public static void main(String[] args)
{
String a = new String("Hello World");
String b = "Hello World";

}

}


0 new #16 <java/lang/String>
3 dup
4 ldc #18 <Hello World>
6 invokespecial #20 <java/lang/String.<init>>
9 astore_1
10 ldc #18 <Hello World>
12 astore_2
13 return



回复 点赞
craster 2008年03月19日
[Quote=引用 25 楼 lnp119112555 的回复:]
String str = new String( "abc ");

到底创建了几个对象,现在说法不一啊,不知道该听谁的啦

请问各位高手,创建了几个对象,是哪几个对象,小弟在此谢过
[/Quote]

创建了2个对象,堆各池里分别有一个,而LZ的题目总共创建了2个对象,因为池里有一个(相同的不会再创建),而用new时第每次都创建
String a= "abc "; //池中一个
String b= "abc "; //跟a相同,仍为一个
String c=new String( "abc "); //本来要创建2个,一个是这里"abc"本身就是pool中的一个对象,而在运行时执行new String()时,将pool中的对象复制一份放到heap中,并且把heap中的这个对象的引用交给c持有。ok,这条语句就创建了2个String对象。因为池中有"abc"所以在这里总共创建了2个对象.一个堆中,一个池中。

String d=c.intern(); //池中
所以总共是创建了2个对象
回复 点赞
fcpahj 2008年03月19日
真是不知道
回复 点赞
hahalzx 2008年03月19日
学习中
回复 点赞
AshEmissary 2008年03月19日
学习~~
回复 点赞
jeff_jian 2008年03月19日
8懂
回复 点赞
hwlovewy 2008年03月19日
看不懂中
回复 点赞
nihuajie05 2008年03月19日
第一反应就是2....
怎么搞的...
回复 点赞
xql80329 2008年03月19日
LZ我不知道你明白什么了?你看的
System.out.print((hello == ( "Hel "+ "lo ")) + " ");
System.out.print((hello == ( "Hel "+lo)) + " ");
System.out.println(hello == ( "Hel "+lo).intern());
这三个 明显是false
回复 点赞
zryhy 2008年03月19日
mark
回复 点赞
hacker107 2008年03月18日
[Quote=引用 41 楼 john_sheep 的回复:]
我特别想问一下,这跟实际工作有什么关系么?
[/Quote]

有关系的,如果按照你的想法什么都不用学都可以。这是Java的基础知识。

另外想问一下:String str = new String( "abc "); 创建了几个对象?网上说是2个。那么请问有什么证据可以说明?
回复 点赞
约翰羊 2007年03月20日
我特别想问一下,这跟实际工作有什么关系么?
回复 点赞
Totti317 2007年03月20日

用得着
回复 点赞
碧海情天-赵亮 2007年03月16日
MARK
回复 点赞
中场7号 2007年03月16日
张见识
回复 点赞
caesarx 2007年03月16日
也不能这么说吧,至少加深理解
回复 点赞
l563989063 2007年03月16日
我是初学者感觉上是很难的,不过也略为能看懂吧!感觉上真是相差太多,我还得努力才行呀!
回复 点赞
sunny3106 2007年03月16日
学习中,但是有用吗?
同意john_sheep!
回复 点赞
debao 2007年03月16日
luyang1016(闭月羞花猫)
goog!
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告