public static void main(String[] args) {
Coder coder1 = new Coder("kuang", "java", 27);
Coder coder2 = new Coder("kuang", "java", 27);
System.out.println("coder1 == coder2: " + (coder1 == coder2)
+ " , coder1.equals(coder2): " + coder1.equals(coder2));
}
输出都是false
你这两个肯定是false
因为你两个都是 new 出来的,new 以后就是在 堆 创建了两个完全不相干的对象数据。
所以你在== 他们的内存地址是不相关的
而 equals 比较的是两个值。但是 你这个是 实体类,不是基本数据类型。要比对的话,需要重写 equals和hashCode方法
在JVM中,内存分为堆内存跟栈内存。他们二者的区别是: 当我们创建一个对象(new Object)时,就会调用对象的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用。还需注意的一点,基本数据类型是存储在栈内存中。
初步认识equals与==的区别:
==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同
==是指对内存地址进行比较 , equals()是对字符串的内容进行比较
==指引用是否相同, equals()指的是值是否相同
每次执行new都会在堆内存创建新的对象,即使属性一样
你需要重写类里面的equals方法。
重写后第二个是true,但第一个肯定是false,因为比较的是地址
coder1 == coder2 equls与==的区别是,==比较的是具体的数值,equls比较的是地址。你这代码比较的不对,coder1 是一个对象coder2 也是一个对象两个对象的具体数值都是不一样的所以你用==比较具体的数值都是对象的地址,这两个对象你输出就看出来了,你用equls对两个对象比较的时候是对比两个对象的地址,地址都是完全不一样的。可以使用System.out.println(coder1 +" "+coder2);看一下就知道他俩都是地址!