==和equals()

2019-03-20  本文已影响0人  苦茶般人生

当俩个字符串比较时不能用==进行比较,而应该使用String的equals()方法

因为==比较的是俩个的内存地址,而不是值的大小,equals()则是比较俩个的值的大小

对于基本数据类型,由于声明,就会存在栈内存中,int a=3,当你int b =3首先它会先去栈里面找是不是有一个数据为3了,而不会再开辟新空间,如果不是的话新建一个地址,是的话,就把b指向这个地址

对于其他类型都是存在堆里面的动态分配内存,所以每一次新建一个数据都会动态分配一个内存地址,所以==的时候,当然内存地址是不一样的。

equals()方法的格式:

1.当比较俩个字符串时:  第一个字符串.equals(第二个字符串)

2.当比较一个变量和内容时:"内容".equals(变量名)//或    变量名.equals("内容")

当声明(定义)一个变量时,会在内存中开辟空间,然后再存放数据

变量所指向的是内存空间,

寻找数据内容时则是通过变量名找到内存地址,然后通过内存地址找到内存空间(通过变量名来查找比较方便)

Java中默认的 equals方法实现如下:

public boolean equals(Object obj) {    return (this == obj);}

因为java.util.String重写了equals方法,它返回true是俩个字符串对象包含相同内容,而==则是内存地址

术语来讲的区别:

1.==是判断两个变量或实例是不是指向同一个内存空间

equals是判断两个变量或实例所指向的内存空间的值是不是相同

2.==是指对内存地址进行比较

equals()是对字符串的内容进行比较

3.==指引用是否相同

equals()指的是值是否相同

双等号就是比较的栈里面的内容,原始数据类型和地址都是放在栈里面的

而equals则是根据地址拿到堆里面的内容进行比较。

上一篇下一篇

猜你喜欢

热点阅读