String str1 = "android";
String str2 = "android"; // T
String str3 = new String("android"); // F
String str4 = "and" + "riod"; // T
String str5 = "and"; // F
str5 = str5 + "riod";
关键在于。。。你要理解s1=new String("we are students");
s2="We are students";
这两个是不一样的。。。。new是用新建一个对象的方法。。。。而后一种是放在常量池中的。。。你一下次再用这种方法去创建的时候。。。就会去常量池里面找,所以
s2="We are students";
s3="We are students";
这两个是相同的。。。指向常量池中的"We are students";。。。
而s1=new String("we are students");
=new String(s1);
这两个是不同的对象。。。。。尽管他们的内容是一样的。。。
就像有两个人。。。他们的名字是相同的。。。。但是并不是一样的人。。。。
堆栈:首先我们要明确堆和栈的概念,在系统内存中将局部变量存放在栈中,将new出来的对象以及一些方法(类的代码信息,static变量以及常量池)放在堆中。
现在就说一下==和equals的比较的实质:==比较的是变量的地址而equals比较的是变量的内容,那么根据上面所说的可以得到==比较的是变量存储在栈中的内容,equals比较的是变量存储在堆中的内容。