打算今天分享的内容其实是和上篇的理论内容有点关系,和接下来需要分享的文章相关的,这篇文章我们就说下引用和值之间的区别,也是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; }
其实,说到这里,我们今天要分享的这篇文章就结束了,现在还记得电话面试时面试官问到的这些内容,掌握这些内容,再面试这类问题时就不会觉得很尴尬,今天想分享的就是这些了,希望可以帮助到阅读这篇文章的你,关注微信号后端Coder,喜欢的可以分享和转发文章。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。