`
qingBYqing
  • 浏览: 50514 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

”==“和”equals()“ 的纠结

    博客分类:
  • Java
阅读更多
最近参加了几次笔试题,发现基础题考的比较多,有好几家公司都考到了”==“和”equal“s的使用
这是迅雷2011校园招聘的一个选择题:
    What happens when you try to compile and run the following code?
    public class EqualsTest {
          public static void main(String args[]) {
                Long LA = new Long(666);
                Long LB =new Long(LA);
                long la=LA;
                long lb=LB;
                System.out.print(LA==LB ? "0":"1");
                 System.out.print(la!=lb ? "2":"3");
          }
    }
A.The program compiles but throws a runtime exception in line 7.
B.The program cannot compile because of line 8.
C.The program cannot compile because of line 4.
D.The program compiles and prints "13".
E.The program compiles and prints "03".
F.The program compiles and prints "12".
G.The program compiles and prints "02"

一. “=="和”!=“:

上例中最终结果是 :"13"
    虽然两个Long对象实际的都是相同的,然而对象的引用却是不同的,“=="和”!=“比较的是对象的引用(”对象的变量“或者说是”对象储存的地址“)却不是对象的实际本身的内容”666“ 。以及基本类型也是用他们来比较的。
如果出现:
int a=1;
int b=1;
a.equals(b);
编译是通不过的

二.equals 的用法:


class Value{
int i;
}
public class EqualsTest3 {
    public static void main(String[] args) {
        Value v1=new Value();
        Value v2=new Value();
       v1.i=v2.i=100;
        System.out.println(v1.equals(v2)); 
    }
}

输出:false

      其实equals()的默认比较也是比较两个引用的,所以在上面这个实例中相当于”v1==v2“比较,结果当然是false。

  只有当在比较的两个对象所属类中覆盖(重写)了老大Object的equals()方法时,才能用equals()来比较两个对象的实际内容:

public class EqualsTest3 {

	public static void main(String[] args) {

		String s1 = new String("abc");
		String s2 = new String("abc");

		System.out.println(s1.equals(s2));
	}
}
结果是:true
    为什么呢,看上去这个跟前一个例子相矛盾了 ,其实不然。 看看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;
    }
看完这段代码,就知道为什么上例中的结果是 true 了;

   如果有需要 我们自己也可以重写老大Object 的equals()的方法从而达到我们的目的:
class Value {
    Value(String s) {
    }

    public boolean equals(Object obj) {
        System.out.println("我不管你怎么搞,都不让你们两个相等");
        return false;
    }
}
public class EqualsTest3 {

	public static void main(String[] args) {

		Value v1=new Value("a");
		Value v2=new Value("a");
	
		System.out.println(v1.equals(v2));
	}

}
结果可想而知,呵呵
3
2
分享到:
评论
5 楼 My*Love 2010-11-11  
LZ,不错,加油。。。
4 楼 qingBYqing 2010-11-05  
决胜千Li 写道
第一题输出的是“13”吧!

  粗心了,谢谢指正!
3 楼 qingBYqing 2010-11-05  
ethan163 写道
决胜千Li 写道
第一题输出的是“13”吧!

我的也是13。。。
不知楼主是怎么弄出12的 请教

不好意思 粗心了
2 楼 ethan163 2010-11-05  
决胜千Li 写道
第一题输出的是“13”吧!

我的也是13。。。
不知楼主是怎么弄出12的 请教
1 楼 决胜千Li 2010-11-05  
第一题输出的是“13”吧!

相关推荐

    ==运算符和Equals()方法区别

    "运算符和Equals()方法区别" 在C#语言中,`==`运算符和`Equals()`方法都是用来比较两个对象是否相等,但是它们之间存在着很大的区别。 对于值类型来说,`==`运算符和`Equals()`方法的行为是一致的,都会比较两个...

    ==和equals的区别

    Java 中的 == 和 equals 方法的区别 在 Java 中,比较值大小有两种方法:== 和 equals,这两个方法的使用场景和比较规则不同,下面我们将详细探讨它们的区别。 基本数据类型和引用数据类型 在 Java 中,有两种...

    ==和equals方法究竟有什么区别

    在Java编程语言中,`==`和`equals()`方法是用来比较对象之间关系的两种常见方式,但它们在使用上有着显著的区别。 首先,`==`运算符主要用于比较基本类型(如int、char、byte等)的值是否相等,或者比较引用类型...

    简单介绍java中的“==”和equals

    简单介绍java中的“==”和equals

    字符串比较之 “==”和 “equals”

    "=="和"equals()"是两种常用的字符串比较方法,但它们之间存在一定的区别和使用场景。这篇博客将深入探讨这两个方法的工作原理以及何时应该使用它们。 首先,"=="运算符在Java中主要用于比较基本类型变量的值,如...

    Java中的==和equals区别

    - 对于字符串和包装类,应优先使用`equals`方法进行比较,以确保得到正确的结果。 理解`==`与`equals`之间的区别对于编写正确且高效的Java代码至关重要。希望本文能帮助您更好地掌握这一概念,并在实际开发中避免...

    ==与equals的比较

    "Java中的==和equals方法比较" 在Java中,`==`和`equals`是两种不同的比较方法,前者比较引用地址,而后者比较对象的实际内容。 首先,让我们来看看`==`运算符的用法。`==`运算符可以用来比较基本数据类型和引用...

    java基础之 “==”与“equals”区别详解

    "java基础之“==”与“equals”区别详解" 根据java基础之“==”与“equals”区别详解,以下是相关知识...学习java基础之“==”与equals()需要充分理解它们的区别和应用场景,并且需要通过实践和练习来熟悉它们的使用。

    ==和equals的比较

    C# 中的 == 和 equals 比较 在 C# 编程语言中,`==` 和 `equals` 是两个常用的比较运算符,但它们之间有很大的区别。 堆和栈的区别 在理解 `==` 和 `equals` 之前,我们需要了解堆和栈的区别。堆是一种动态分配的...

    == and equals() 的比较 绝对值得看

    在Java编程语言中,了解`==`和`equals()`的区别是非常关键的,因为它们在处理不同类型的数据时有不同的行为。这两个运算符在比较基本数据类型(如int、char)时表现相同,但当涉及到对象时,它们的行为就有所不同。 ...

    java中equals和==的区别

    Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的概念,很多开发者容易混淆它们。理解这两个概念的区别是非常重要的,因为它们对编程的正确性和性能都有很大的影响。 首先,我们需要了解 Java ...

    浅析C#中的等号“==”和Equals

    1.“==”和Equals两个真的有关联吗?  对于“==”和Equals大多数网友都是这样总结的:  “==” 是比较两个变量的值相等。  Equals是比较两个变量是否指向同一个对象。  public class Person  {  public ...

    java中==和equals的区别

    对于开发的程序员小伙伴,大家肯定对于==和equals不陌生,而且会经常用到他,那么又有几个能够说清楚了==和equals是怎么回事呢?他了呢两个有什么区别呢? 比较 == 比较的是栈中的值,基本数据类型是变量值,引用...

    知识点 比较运算符==和equals方法的比较

    在Java编程语言中,比较运算符`==`和`equals()`方法是用来检查两个对象是否相等的,但它们之间存在显著的区别。理解这些差异对于编写正确的代码至关重要。 首先,我们来看`==`运算符。它主要用于基本数据类型的比较...

    java中的==和equals()方法1

    在Java编程语言中,了解如何正确使用`==`和`equals()`方法是非常关键的,因为它们在比较对象和基本类型时有不同的行为。下面将详细解释这两个方法的工作原理、使用场景以及一些常见误区。 首先,`==`运算符主要用于...

    “ ==”和.Equals()有什么区别?

    在C#编程语言中,“==”运算符和“.Equals()”方法是两种常见的用于比较对象是否相等的方式,但它们之间存在着重要的差异。理解这些差异对于编写高效且准确的代码至关重要。 首先,让我们来探讨“==”运算符。在C#...

    String中==与equals区别验证

    在Java编程语言中,`==` 运算符与 `equals()` 方法被广泛用于比较对象,尤其是当处理字符串...总的来说,`==` 和 `equals()` 在字符串比较中扮演着不同的角色。理解它们的区别对于编写高效且正确的Java程序至关重要。

    ==代替Object#equals() - 加速在容器类中搜索元素速度的可能性

    3. 传递性:对于任何非null的引用x、y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)也应返回true。 4. 一致性:对于任何非null的引用x和y,只要对象的字段不变,多次调用x.equals(y)应该...

    C#中的 == 和equals()区别浅析

    在C#编程语言中,`==`运算符和`Equals()`方法是两种常见的用于比较对象是否相等的方式,但它们之间存在重要的区别。本文将详细解释这两种比较方式的不同点。 首先,`==`运算符主要用于比较基本数据类型的值是否相等...

    Java常见笔试、面试题目深度剖析 相等性(==及equals方法)详解

    本篇文章将深入剖析“==”运算符和equals()方法的区别与联系,帮助你在Java的笔试和面试中更好地应对相关问题。 首先,“==”运算符在Java中用于比较基本类型变量的值是否相等,例如int、char或boolean。对于引用...

Global site tag (gtag.js) - Google Analytics