当前位置:首页>新奇发现>文章内容

java里equals和==的区别

2016/4/26分类:新奇发现 张孝帅

java里equals和==的区别  

1、java中equals和==的区别 值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。

  

2、==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

  

3、equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

  

4、==比较的是2个对象的地址,而equals比较的是2个对象的内容,显然,当equals为true时,==不一定为true。

  == 和 equals() 的区别

  == :比较的是,值是不是相等

  基本数据类型比较的是值,引用类型比较的是地址值

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

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

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

  所以下面是错误的写法:

  int a = 1;

  a.equals(1);

  因为基本数据类型不是算是对象,不能调用方法

  如果是基本数据类型那么就用==比较

  如果是引用类型的话,想按照自己的方式去比较,就要重写这个类中的equals方法, 如果没有重写,那么equals和==比较的效果是一样的,都是比较引用的地址值

  如果是比较字符串,那么直接用equals就可以了,因为String类里面已经重写了equals方法,比较的时候字符串的内容,而不是引用的地址值了

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

  当前用一个引用指向一个对象的时候,比如:Student s = new Student(),然后如果直接打印这个引用s,其实是调用了s.toString()方法,然后就会把这个引用里面的存放的堆区对象的地址值显示出来

  所以我们会常常在类中重写这个toString()方法,然后让这个类的引用按照我们要求来返回内容。

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

  例如:Person p = new Student()

  //会输出:class com.briup.chap06.Student

  //说明这个引用p在运行时指向的是Student这个类的对象

  //注意这个引用p的类型是Person的(多态)

  System.out.println(p.getClass());

更多java面试题请关注小小小帅个人博客

关于博主

博主

博主:张孝帅

简介:这很小小帅