打算今天分享的内容其实是和上篇的理论内容有点关系,和接下来需要分享的文章相关的,这篇文章我们就说下引用和值之间的区别,也是java面试会问到的点,掌握这个出去面试也不再为难了,搬好小板凳,继续咯。
我们先说下java中两种类型吧,做下铺垫内容,避免看到下面的内容时一头雾水,不知所措,java由于是面向对象的一门高级语言(相对于汇编语言来说的),java分为基本数据类型和引用类型,基本数据类型基本上是int,char,boolean等8种常用的类型,另外一种就是引用类型了。
好了,==在基本数据类型和引用类型做比较时是不一样的,基本类型比较的是值是否相同,对于引用类型来说比较的当然是引用是否一样了。为了加深我们对其的理解程度,附上一段代码,希望你可以明白。
public static void main(String[] args) {
String x="hello";
String y="hello";
String z=new String("hello");
System.out.println(x==y);//true
System.out.println(x==z);//false
System.out.println(x.equals(y));//true
System.out.println(x.equals(z));//true
}
自己将代码写入到自己的IDE环境里进行运行一下,一目了然,由于x,y指向的是同一个对象引用,所以==在进行引用类型判断是true,但是z对象由于是new String("hello"),从新在堆空间里进行了新的一块内存的划分,导致引用对象的地址不一样了,所以x==z就是false。这样你明白了吧。
下面我们说下equals()方法了,其实equals()方法也是对引用进行比较的,看下代码先。
public boolean equals(Object obj) {
return (this == obj);
}
在这你可能会有点疑问为什么String对象在用equals()方法进行判断时,返回的是true呢?因为String重写了equlas方法,看下String重写的equals方法的代码,你就明白了。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
其实,说到这里,我们今天要分享的这篇文章就结束了,现在还记得电话面试时面试官问到的这些内容,掌握这些内容,再面试这类问题时就不会觉得很尴尬,今天想分享的就是这些了,希望可以帮助到阅读这篇文章的你