试题详解: 1.String s = new String(“abc”)执行此句时,首先在String Pool(String池)中查找有没有字符常量”abc”,没有则在String Pool中创建”abc”的对象,当执行new String(“abc”)时则在java的堆中创建一个”abc”对象,而s则是该对象的引用,因此共计创建2个对象。 2.String s1 = “abc”执行此句时,首先还是在String Pool中查找有没有字符串常量”abc”,有则直接将s1作为String Pool中”abc”的一个引用,因此此时没有创建任何对象。 3.String s2 = new String(“abc”)执行此句时,依旧在String Pool中查找有没有字符串常量”abc”,有则不进行再次创建,由于这里用了new关键字(有new就有对象),所有便在java堆中又创建了一个”abc”对象(地址与第一句在堆中创建的地址不同),而s2则是这个对象的引用,因此执行此句时只创建了1个对象。 4.我们知道”==”是判断对象的,因此由于s指向的是java对中的”abc”对象而s1指向的则是String Pool中的”abc”对象,所以输出false。 5.6判断同上。