class EqualsTest
{
public static void main(String[] args)
{
String str1 = new String("我是邵永阳");
String str2 = new String("我是邵永阳");
System.out.println(str1.equals(str2)); //equals 比较的是变量的值。
System.out.println(str1 == str2);
//这个其实都在堆中保存,其实比较的是str1的内存地址是否和str2相等。不相等。为false
String str3 = str1;
System.out.println(str3.equals(str1));
String N_str1 = "我是邵永阳";
String N_str2 = "我是邵永阳"; //这两个变量都在栈中保存,栈可以共享内容。都指向一个内存地址。所以为true
String N_str3 = N_str1;
System.out.println(N_str1 == N_str2); //为TRUE,以为变量分配与栈内存,栈内存特点在于快,共享
System.out.println(N_str3 == N_str1); //为TRUE,因为直接是对象赋值
String No_1 = new String("这个放堆里面");
String No_2 = "这个放栈里面";
System.out.println(No_1 == No_2); //这个不用想都不一样。不解释
}
}
1、区分变量的值是放在栈中还是堆中?
2、栈的优势在于内容能够共享于多个相同值的变量、读取速度快。堆放的是对象的值。读取速度慢。
String str = new String("这个"); //可以看到str存储的是New出来的引用地址
String str1 = "这个"; //这个放栈里面,没有New,值先放栈里。
System.out.println(str == str1); //这个输出结果为false。比较的是内存地址。
System.out.println(str.Equals(str1)); //这个比较的是两个变量的值。虽然不一块内存区域,但是值相同
总结:
Equals比较的是值,也就是变量的内容。==比较的是内存地址。结合着栈和堆的区别来判断为True和False.