面向对象java学习笔记2

来源:互联网 发布:淘宝深圳美版s7 编辑:程序博客网 时间:2024/05/17 02:50

相同和同一:

   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。

0 0
原创粉丝点击