当俩个字符串比较时不能用==进行比较,而应该使用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则是根据地址拿到堆里面的内容进行比较。
网友评论