最近参加了几次笔试题,发现基础题考的比较多,有好几家公司都考到了”==“和”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));
}
}
结果可想而知,呵呵
分享到:
相关推荐
==运算符和Equals()方法区别,从网上找到的,大家看一看吧~
java中比较值大小,==和equals的区别,基本数据类型和引用数据类型比较值方法
简单介绍java中的“==”和equals
==和equals方法究竟有什么区别? == 操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。 ...
详细介绍和讲解Java中的==和equals区别
关于Java中==的用法与equals的用法,醉重要的是比较它们的不同之处
接触c#一年了,一直没搞懂“==”和equals之间的具体区别,今天特意研究了一番,终于豁然开朗了,高兴中!给大家分享
知识点 比较运算符==和equals方法的比较 知识点 比较运算符==和equals方法的比较
1.“==”和Equals两个真的有关联吗? 对于“==”和Equals大多数网友都是这样总结的: “==” 是比较两个变量的值相等。 Equals是比较两个变量是否指向同一个对象。 public class Person { public ...
对于开发的程序员小伙伴,大家肯定对于==和equals不陌生,而且会经常用到他,那么又有几个能够说清楚了==和equals是怎么回事呢?他了呢两个有什么区别呢? 比较 == 比较的是栈中的值,基本数据类型是变量值,引用...
NULL 博文链接:https://tonysmith.iteye.com/blog/1440129
主要介绍了java基础之 “==”与“equals”区别详解,需要的朋友可以参考下
能够加强对java中equals与==区别的理解。
在本文中,我们将讨论“ ==”与“ .Equals in C#”之间的区别。
值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。...equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
String中==与equals区别验证
Java中的==与equals()实例方法Java中测试两个变量是否相等的方法有两个,一个是用==运算符,另一个就是object类提供的equals()方法。2
主要介绍了C#中的 == 和equals()的区别,对不同点进行了阐述,感兴趣的小伙伴们可以参考一下
Java面试题07.==和equals的区别.mp4
equals和==的区别?equals与==的区别?equals和==有什么区别? Java解惑系列之一--equals和==之间究竟有什么区别 稍微学过一些java的同学都可能在网络上看到这样的一道题: 在java语言当中,equals和==之间究竟有...