Java中的equals与==之比较

来源:互联网 发布:黑客大会 知乎 编辑:程序博客网 时间:2024/05/17 08:23

Java中的==的主要功能:①比较基本数据类型,如果二者值相同则返回true否则返回false②用于比较引用,如果引用指向内存中的同一对象,返回true否则返回false。

      equals方法本意是确定两个对象的引用是否相同。

      下面看一段测试程序:

       

static class Value {int i;}/** * @param args */public static void main(String[] args) {// TODO 自动生成的方法存根int a = 1, b = 1;System.out.println(a == b);Integer n1 = new Integer(47);Integer n2 = new Integer(47);System.out.println(n1 == n2);System.out.println(n1.equals(n2));Value v1 = new Value();v1.i = 2;Value v2 = new Value();v2.i = 2;System.out.println(v1 == v2);System.out.println(v1.equals(v2));}
输出结果为:

true
false
true
false
false

为何String与Value的equals方法不同呢,因为String类对equals方法进行了覆盖,功能变为比较两个字符串内容是否一致。

        同样的对Value的equals方法进行重载,代码如下:

static class Value {int i;@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;Value other = (Value) obj;if (i != other.i)return false;return true;}}/** * @param args */public static void main(String[] args) {// TODO 自动生成的方法存根Value v1 = new Value();v1.i = 2;Value v2 = new Value();v2.i = 2;System.out.println(v1 == v2);System.out.println(v1.equals(v2));}

运行结果:

  fals truee

0 0