分享:一道BT试题

中间件XL 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"; }

学海无崖,顿感羞愧,特此分享。
...全文
1571 53 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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
  • 打赏
  • 举报
回复

用得着
  • 打赏
  • 举报
回复
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!
加载更多回复(33)

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧