下面代码将输出什么内容:()
public class SystemUtil{ public static boolean isAdmin(String userId){ return userId.toLowerCase()=="admin"; } public static void main(String[] args){ System.out.println(isAdmin("Admin")); } }
return new String(result, 0, len + resultOffset);
public class ImmutableString { public static void main(String[] args) { String s1 = "Test"; String s2 = "Test"; String s3 = new String("Test"); String s4 = new String("Test"); System.out.println(s1==s2);//true System.out.println(s3==s4);//false } }问题就是,在方法区的常量池的"admin"和在堆中的"admin"比较的时候是怎么样的呢,又不是基本数据类型,比较的是地址,那当然是false啦!
public class TestPlus { public static void main(String[] args) { String s1 = new String("HeIIo");//共2个 堆区和常量池都有"HeIIo" String s2 = "World";//共3个 常量池中的"World" System.out.println("s1 = " + s1);//共5个 "s1 = "&"s1 = HeIIo"都在常量池 System.out.println("s2 = " + s2);//共7个 "s2 = "&"s2 = World"常量池 //在堆里创建“HeIIoWorld”对象,创建2个共9个 s1 += s2;//9 HeIIoWorld "HeIIoWorld"堆和常量池都有,因为创建了新对象 System.out.println("s1 = " + s1);//共10个 "s1 = HeIIoWorld"常量池 System.out.println("s1==HeIIoWorld " + (s1=="HeIIoWorld") );//共13个 "s1==HeIIoWorld "在常量池,"s1==HeIIoWorld false"在常量池 s1 = s1.concat(" 张三!");//HeIIoWorld张三! 共16个 "HeIIoWorld 张三"堆和常量池,"张三"常量池 System.out.println("s1.concat = " + s1);//共18个 "s1.concat = "&"s1.concat = HeIIoWorld 张三"常量池 s1 = s1.replaceAll("II", "aa");//HeaaoWorld张三!共22个 System.out.println("s1.concat = " + s1);//共23个 System.out.println(s1 + " ls index: " + s1.charAt(2));//a 共28个 System.out.println("--------------------- "); StringBuffer sb1 = new StringBuffer("Hello"); StringBuffer sb11 = new StringBuffer("Hello"); StringBuffer sb2 = new StringBuffer("World"); StringBuffer sb3= new StringBuffer("Hello"); StringBuffer sb4=sb1.append("abc"); System.out.println( "sb4==sb1 "+(sb4==sb1));//true sb1.toString();//创建String对象返回String对象的地址 //System.out.println( sb1.toString()); //System.out.println( sb1==sb1.toString()); //System.out.println( "Helloabc==sb1.toString()="+("Helloabc"==sb1.toString())); //sb3=sb1+sb2; System.out.println("sb11==sb3 "+(sb11==sb3)); System.out.println("sb11.equals(sb3) "+sb11.equals(sb3)); System.out.println("sb1 = " + sb1); } }理解了以上的程序,那么对于String对象的创建,你将非常透彻。