Java中为何基本类型无需.equals方法?为何可直接用==比较?
为什么Java基本类型能用
==比较,而字符串不行? 得先搞懂Java里基本类型和引用类型的存储本质:
- 基本类型(比如
int、char、boolean)的变量,直接存储的就是它的实际值。比如int a = 10;,变量a里装的就是数字10本身。 - 引用类型(比如
String、自定义类对象)的变量,存储的是对象在堆内存中的地址引用,不是对象的内容。比如String s = new String("abc");,变量s里装的是这个字符串对象在堆里的内存地址,不是"abc"这串字符。
- 基本类型(比如
再看
==运算符的作用:- 对基本类型来说,
==直接对比两个变量存储的实际值,这正是我们想要的比较逻辑,所以用起来没问题。比如int a=10; int b=10; a==b就是对比10和10,结果为true。 - 对引用类型来说,
==对比的是两个变量存储的内存地址,也就是看它们是不是指向同一个对象。比如String s1 = new String("abc"); String s2 = new String("abc");,这两个是不同的对象,地址不一样,所以s1==s2会返回false,但它们的内容相同,这时候就得用equals()来对比内容。
- 对基本类型来说,
简单说:基本类型的变量本身存值,==比的就是值;引用类型的变量存地址,==比的是地址,要比内容就得用equals()。
内容的提问来源于stack exchange,提问作者user3491432
相关产品推荐
相关产品推荐

