日期:2014-05-20  浏览次数:20700 次

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;

------解决方案--------------------