“==” 和 equals()的区别

※ “==” 和 equals()的区别

※ == :比较
. 基本数据类型比较的是值;
. 引用类型比较的是地址值。

※ equals(Object o):
1)不能比较基本数据类型,基本数据类型不是类类型;
2)a.比较引用类型时(该方法继承自Object,在object中比较的是地址值)等同于”==”;
Object类中的方法,所以,在每一个java类中,都会有这个方法,因为每一个java类都是直接或者间接的Object类的子类,会继承到这个方法。

2)b.如果自己所写的类中已经重写了equals方法,那么就安装用户自定义的方式来比较俩个对象是否相等,如果没有重写过equal方法,那么会调用父类(Object)中的equals方法进行比较,也就是比较地址值。

注:有的实现类中(JDK中),重写了equals方法,这时候比较内容(java.lang.String)
在自定义类中,如果比较对象,自己可以重写equals方法定义比较规则。

注意:equals(Object o)方法只能是一个对象来调用,然后参数也是要传一个对象的。

所以下面是错误的写法:
int a = 1;
a.equals(1);
因为基本数据类型不是算是对象,不能调用方法。

1)如果是基本数据类型那么就用==比较
2)如果是引用类型的话,想按照自己的方式去比较,就要重写这个类中的equals方法,
如果没有重写,那么equals和==比较的效果是一样的,都是比较引用的地址值。
3)如果是比较字符串,那么直接用equals就可以了,因为String类里面已经重写了equals方法,
比较的时候字符串的内容,而不是引用的地址值了。

※ toString(): Object类中的方法,所以,在每一个java类中,都会有这个方法,因为每一个java类都是直接或者间接的Object类的子类,会继承到这个方法。

toString()方法,继承自Object(默认构造对象之后打印地址值,可以不指明toString()方法,隐式调用)
Student s=new Student();
Syso(s);
Syso(s.toString())
注:如果在代码中,不希望打印地址,
可以重写toString()方法(一般情况用于打印构建对象的属性)

当前用一个引用指向一个对象的时候,比如:Student s = new Student(),然后如果直接打印这个引用s,其实是调用了s.toString()方法,然后就会把这个引用里面的存放的堆区对象的地址值显示出来。所以我们会常常在类中重写这个toString()方法,然后让这个类的引用按照我们要求来返回内容。

※ getClass():Object类中的方法,所以,在每一个java类中,都会有这个方法,并且这个方式final修饰的,不能被子类重写,这个方法可以返回某一个引用在运行的时候指向对象的类型。

getClass() 获取.class文件经JVM加载到方法区中模版的位置,不管构建对象模版始终是一个

例如:Person p = new Student() 
            //会输出:class com.briup.chap06.Student
            //说明这个引用p在运行时指向的是Student这个类的对象
            //注意这个引用p的类型是Person的(多态)
             System.out.println(p.getClass());
package com.briup.ObjetEquals;

public class Tea {
    private int age;
    private String name;

    public Tea() {
    }
    public Tea(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //t.equals(t1)
    @Override
    //重写equals方法
    public boolean equals(Object obj) {
        if(obj==null){
            //不相等
            return false;
        }else if(!(obj instanceof Tea)){
            return false;
        }
        Tea t=(Tea) obj;
        if(this.age==t.age){
            return true;
        }
        return false;
    }
    public int getAge() {
        return age;
    }
    @Override
    public String toString() {
        return "Tea [age=" + age + ", name=" + name + "]";
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}



package com.briup.ObjetEquals;

public class TeaTest {
    public static void main(String[] args) {
        int a=10;
        int b=10;
        String str="hello";
        String str1="hello";
    String str2=new String("hello");

1.   System.out.println(str==str2);
 //字符串中的equals是String这个类重写过的方法
        //只比较内容
        //equals方法继承子Object类,在Object中比较的是地址
        //值和内容,等价于==
    System.out.println(str.equals(str2));

        Tea t=new Tea("lisi", 33);
        Tea t1=new Tea("tom", 33);
        Tea t2=new Tea("tom", 33);
        Tea t3=new Tea("tom", 33);
        //假设年龄相同的认为是同一个对象,重写eqauls()
        //在比较的对象内部
    System.out.println(t.equals(t1));
        System.out.println(t);
    System.out.println(t.getName()+"--"+t.getAge());
        System.out.println(t.toString());

2.    //getClass获取运行是对象的模版(镜像)
                Class c=t.getClass();
                //得到镜像模版
          system.out.println(t.getCLass());
            System.out.println(c);
        Class c1=t1.getClass();
        System.out.println(c1);
        Class c2=t2.getClass();
        System.out.println(c2);
        Class c3=t3.getClass();
        System.out.println(c3);

        Tea t2=t;
        System.out.println(t);
        System.out.println(t2);
        System.out.println(t==t2);
        }
       } 







※ 简述String s=”“和” “,以及null的区别

“”代表空字符串,会在堆区开辟空间。
“ ”代表一个还有空格字符的字符串。
null 代表空值,不会再堆区开辟空间。

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值