读书人

JAVA面试题:到底创建了几个对象?该怎

发布时间: 2012-09-14 23:00:49 作者: rapoo

JAVA面试题:到底创建了几个对象?

1.

Java code
String str=new String("abc"); 

2.
Java code
String str="abc";

3.
Java code
String a="ab"+"cd";

上面代码分别创建了几个对象?
4.有如下代码
Java code
String a = "ab";String b = "cd";String c = "abcd";String d = "ab" + "cd";String e = a + "cd";String f = "ab" + b;String g = a + b;

如果不去调试,问d,e,f,g中那些==c?

[解决办法]
在串池中不存在"abc"这个常量的前题下:
String str=new String("abc"); 创建了二个对象。分别在串池中和堆中。
String str="abc";只在串池中创建了一个对象。
String a="ab"+"cd";在串池中创建了三个对象。分别是:"ab","cd","abcd"。
d等于c。指向常量池中的"abcd"这个对象。
在编译期即可确定值的String对象。java编译器会进行自动优化将这些常量放入串池中。用new产生的对象会放在堆上。
[解决办法]
探讨
在串池中不存在"abc"这个常量的前题下:
String str=new String("abc"); 创建了二个对象。分别在串池中和堆中。
String str="abc";只在串池中创建了一个对象。
String a="ab"+"cd";在串池中创建了三个对象。分别是:"ab","cd","abcd"。

[解决办法]
创建了两个对象
[解决办法]
探讨

在串池中不存在"abc"这个常量的前题下:
String str=new String("abc"); 创建了二个对象。分别在串池中和堆中。
String str="abc";只在串池中创建了一个对象。
String a="ab"+"cd";在串池中创建了三个对象。分别是:"ab","cd","abcd"。
d等于c。指向常量池中的"abcd"这个对象。
在编译期即可确定值的Strin……

[解决办法]
6个
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d==c);
System.out.println(e==c);
System.out.print(f==c);System.out.println(" "+(f==e));
System.out.print(g==c);System.out.print(" "+(g==e));System.out.print(" "+(g==f));


ab
cd
abcd
true
false
false false
false false false
[解决办法]
1、两个对象
2、一个对象
3、一个对象
[解决办法]
这个面试题中经常遇到。
String对象详解参考
http://blog.csdn.net/ameyume/archive/2010/08/16/5815756.aspx
[解决办法]
探讨
虽然简单,果然你们和我一样
那么自信的错了

没有全对

[解决办法]
1.2个
2.1个
3.1个
Java code
                String a = "ab";        String b = "cd";        String c = "abcd";        String d = "ab" + "cd";        String e = a + "cd";        String f = "ab" + b;        String g = a + b;
[解决办法]


有些事情建议LZ百度下 该题那些公司的正确答案大多都是:两个

可是其实这个问题答案是不确认的

如果说你在这里使用了String a = "aa";

其他地方也使用了这个 String b = "aa";

实际创建的对象就只有三个(两个引用对象 一个字符串对象 存在于常量池中)

因为字面值通常是在编译期间(还是运行时..)大概就被存储到了常量池中 所以只有三个对象

如果用String a2 = new String("aa");的话 是在堆中创建一个String对象 所以与上面的用==的结果是false(顺带一提 String有个方法是到常量池中查找该值是否存在)

另外 + 操作符实际进行的是StringBuilder的append操作 所以也是在堆中创建的对象

我个人记忆难免有误 不过你可以自己去搜索下 别把该问题想像的像面试你的人那样肤浅 有些事情仔细看看还是很有意思的

祝福俺工作顺利吧..


[解决办法]
2两个。。。。
[解决办法]

探讨

这个面试题中经常遇到。
String对象详解参考
http://blog.csdn.net/ameyume/archive/2010/08/16/5815756.aspx

[解决办法]
1.2
2.1
3.3
[解决办法]
String str="abc";
也产生两个对象吧。
[解决办法]
三个 14楼说的对
[解决办法]
String str=new String("abc"); 创建了二个对象。分别在串池中和堆中。
String str="abc";只在串池中创建了一个对象。
String a="ab"+"cd";具体说一下:
*JVM先将字符串a做“"ab"+"cd";”处理,然后再赋值给a
*相当于:a="abcd";
所以只创建了一个对象。
*****************************************************************
答案:2、1、1
[解决办法]
每日一个的问题

http://topic.csdn.net/u/20101205/22/993a0f8b-74fb-4904-b2bd-89b5ca704bea.html?44702
[解决办法]
探讨
2 1 1
String str=new String("abc");
紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?相
信大家对这道题并不陌生,答案也是众所周知的,2个。接下来我们就从这道题展开,一起
回顾一下与创建String对象相关的一些JAVA知识。
我们可以把上面这行代码分成String str、=、"abc"和new String()四……

[解决办法]
学习了 不错
[解决办法]
三楼说对

读书人网 >J2SE开发

热点推荐