本题主要考察java中常量优化机制,编译时s1已经成为“abc”,并在常量池中保存一份,故String s2="abc",在常量池中查找创建,s2不需要再创建。所以s1和s2指向同一个对象,故两个结果都输出true。
5、以下语句的输出结果是:
[Java] 纯文本查看 复制代码
String s1="ab";
String s2="abc";
String s3=s1+"c";
System.out.println(s3==s2);
System.out.println(s3.equals(s2));
Java 语言提供对字符串串联符号(”+”)和其他对象到字符串的转换的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的,字符串转换是通过 toString 方法实现的。在本题中,先在常量池中创建”ab“,地址指向s1,再创建”abc”,指向s2。对于s3,先创建StringBuilder(或 StringBuffer)对象,通过append连接得到“abc”,再调用toString()转换得到的地址指向s3。故(s3==s2)为false。
6、下面的代码输出什么?
[Java] 纯文本查看 复制代码
String s1 = "abc";
String s2 = new String("abc");
s2 = s2.intern();
System.out.println(s1 ==s2);
输出true,intern()方法将返回从常量池中的字符串对象的引用。当intern()方法被调用,如果常量池中含有一个字符串和当前调用方法的字符串eqauls相等,那么就会返回池中的字符串。如果池中没有的话,则首先将当前字符串加入到池中,然后返回引用。