学习啦 > 知识大全 > 知识百科 > 公共基础知识 > ==和equals的区别

==和equals的区别

时间: 映芳735 分享

学习啦在线学习网==和equals的区别

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

学习啦在线学习网   比较的是一个对象在内存中的地址值,

学习啦在线学习网   比如2个字符串对象

学习啦在线学习网   String s1 = new String("str");

  String s2 = new String("str");

  如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。

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

学习啦在线学习网   equals的情况比较复杂,它是java.lang.Object类中的一个方法。因为java中所有的类都默认继承于Object,所以所有的类都有这个方法。

学习啦在线学习网   在Object类源码中是这样写的。

  public boolean equals(Object obj) {

  return (this == obj);

  }

学习啦在线学习网   他同样使用==号进行内存地址的比较。但是许多java类中都重写了这个方法,比如String。

  public boolean equals(Object anObject) {

  if (this == anObject) {

  return true;

  }

  if (anObject instanceof String) {

  String anotherString = (String)anObject;

学习啦在线学习网   int n = count;

  if (n == anotherString.count) {

  char v1[] = value;

  char v2[] = anotherString.value;

  int i = offset;

  int j = anotherString.offset;

  while (n-- != 0) {

学习啦在线学习网   if (v1[i++] != v2[j++])

学习啦在线学习网   return false;

  }

  return true;

  }

  }

  return false;

  }

  String里的方法,如果==号比较不相等,还会进行一下值的比较。

学习啦在线学习网   所以equals方法具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么他和==号等价。

530126