相同和同一:
x——>"abc" <——y; x和y指向同一个。
x——>"abc", y——>"abc",x和y的值相同。
拓:
char *x=”abc”; char *y=”abc”;
x==y的结果是false,判读的是指针引用的内存地址不同;*x==*y的结果是true,两个指针地址所存储的数值相同。
相同检验:equal、 ==、
实例1:
package OOlearning;
public class Isequal {
public static void main(String[] args) {
String a="dc";
String b="dc";
System.out.println(a==b);
System.out.println(a.equals(b));
System.out.println(b.equals(a));
}
}
结果:true true true
Parent p,Child c;验证p是否等于c是由父类方法实现。验证c是否等于p由子类方法实现:
如果有两个子类 c1 c2 :p.equal(c1) p.equal(c2)结果都是true c1.equal(c2)结果不一定 此时的equal方法是子类所有: 可能子类重写了该方法。
实例代码2:
package OOlearning;
public class Isequal2 {
public static void main(String[] args) {
Parent p1=new Parent();
Parent p2=new Parent();
//p2.setPint(2);
if(p1.equals(p2)){
System.out.println("sidwgh");
}
}
}
class Parent{
int pint=0;
public boolean equals(Object o){
if(o instanceof Parent){
Parent p=(Parent) o;//如果改成Parent p= o;不能编译通过——编译是否通过决定于 对象属于的静态类。
return this.pint==p.pint;//如果删掉上面一行代码 改成=o.pint也不能通过
}
return false;
}
public void setPint(int pint) {
this.pint = pint;
}
}
输出结果是:sidwgh
如果将注释行代码取消,结果无输出。
实例代码3:
package OOlearning;
public class Isequal2 {
public static void main(String[] args) {
Parent p1=new Parent();
Child c1=new Child();
Child c2=new Child();
c2.setCint(2);
if(p1.equals(c1)){
System.out.println("p1.equals(c1)结果是true!");
}
if(p1.equals(c2)){
System.out.println("p1.equals(c2)结果是true!");
}
if(c1.equals(c2)){
System.out.println("c1.equals(c2)结果是true!");
}
if(c1.equals(p1)){
System.out.println("c1.equals(p1)结果是true!");//p1不是child类,即p1 instanceof Child的结果返回是false。
}
}
}
class Parent{
int pint=0;
public boolean equals(Object o){
if(o instanceof Parent){
Parent p=(Parent) o;//如果改成Parent p= o;不能编译通过——编译是否通过决定于 对象属于的静态类。
return this.pint==p.pint;
}
return false;
}
public int getPint() {
return pint;
}
public void setPint(int pint) {
this.pint = pint;
}
}
class Child extends Parent{
int cint=0;
public boolean equals(Object o){
if(o instanceof Child){
Child p=(Child) o;
return this.cint==p.cint;
}
return false;
}
public int getCint() {
return cint;
}
public void setCint(int pint) {
this.cint = pint;
}
}
结果是:p1.equals(c1)结果是true!
p1.equals(c2)结果是true!
子类是父类的instance 而父类不是子类的instance。