为啥JAVA不可以用“==”来比较两个字符串是不是相等?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥JAVA不可以用“==”来比较两个字符串是不是相等?相关的知识,希望对你有一定的参考价值。

Java中,如果两个字符串是这样 Sting a=“a” 赋值方式时,同样也可以使用 == 来比较是否相等,但实际上也不是在比较两个变量的内容,当新一个变量赋值时( Sting a=“a” 赋值方式会把值放到栈中)先会从栈中找是否有相同的值,如果有就会直接指向那个值,所以使用==也可比较是否相等。
但如果是new String("a")这样new出字符串对象时,即使内容完全一样,使用==比较也是false,因为==比较的是堆内存中的地址,所以只能是用equals()方法比较内容。

C#可用 == 来比较两个字符串是否相等,其实底层也是使用了equals()方法来进行比较。
参考技术A 先说结论,不能。
两个对象进行比较,如果使用==符号,那么比较的是这两个对象的“引用”(类似C语言中指针的概念)。字符串比较,通常情况下比较的是字符串的值而非引用,不同的“引用”是可以对应相同值的,如果这时候用==比较,得出的结论是不相等,但是实际上它们的值是相等的。举例说明:
String a = new String("abc");
String b = new String("abc");
a == b; //false
a.equals(b) // true通过上面的例子可以看到,虽然两个字符串的值都是"abc",但是用==比较时,它们是不相等的,如果需要比较它们的值,应该使用equals()方法。
如果事情只是像这样的话,那么就简单了……可是还有个东西叫做“字符串常量池”,常量池的机制,会使得在某些情况下,==也能得出正确的结论,就不展开讲了,你只需要记得一点:对象比较的时候,==比较的是引用(指针),要比较对象的值,应当使用equals()方法。
参考:
《Java编程思想
第4版》机械工业出版社
P44-45

java中如何比较两个数组确定是不是相等?

比如说我设计了个密码锁有两个数组int[] secret 和 int[] input。最后要开锁的时候要确定两个数组中的内容是否相等,我首先是用了if (secret,equals(input)) 结果调试的时候发现这里答案是不相等。。。然后我又用了secret == input发现结果还是一样的,不相等。最后我改成了secret[0] == input [0]这样一个一个比较,然后答案便是相等了。请问这是为什么呢? 有没有办法用一个式子就能确定相等?

java比较两个字符串是否相等可以用equals方法或者是“==”。

equals 方法常常用来比较两个对象的内容是否相等,如果只是比较对象的内容,而不比较对象来源和功能类型时,常用此方法。

“==”常用于用于比较引用和比较基本数据类型时是否具有不同的功能,或者是基本数据类型,如果两个值相同,则结果为true,在比较引用时,如果引用指向内存中的同一对象,结果为true。

在比较字符串时,使用equals方法会比较两个对象的字符串常量池里的内容是否相等,在使用“==”方法比较字符串时,需要指定字符串常量池里的比较的那个内容,如果内容相等结果则为true,如果没有指定内容,比较的是内容的来源。

扩展资料

java比较数组时是否相等的判断条件:

一、若当前对象和比较的对象是同一个对象,即return true。也就是Object中的equals方法。

二、若当前传入的对象是String类型,则比较两个字符串的长度,即value.length的长度。

1、若长度不相同,则return false

2、若长度相同,则按照数组value中的每一位进行比较,不同,则返回false。若每一位都相同,则返回true。

三、若当前传入的对象不是String类型,则直接返回false

参考资料来源:百度百科——equals

参考技术A package rechapter9;

import java.util.Arrays;

public class BigDecimalDemo 
public static void main(String[] args) 
int[] secret = 2,3,4,5;
int[] input = 2,3,4,5;
System.out.println(Arrays.equals(secret,input));//true

不用自己写,有自带的

参考技术B Object 的equals方法比较的是地址;String的equals方法比较的是内容。

一个式子就能确定相等:
java.util.Arrays类下的
public static boolean deepEquals(Object[] a1,Object[] a2)

对于密码,我建议不要只是用数字哦,这个解决非数字问题。
参考技术C

判断java中的数组是否相等,有一个方法:Array.equal(new int[], new int[]);

这样的结果是:true。        

参考技术D 写一个类,数组作为成员变量,重写(equals 方法)或者自己写一个方法 就可以了的啊

以上是关于为啥JAVA不可以用“==”来比较两个字符串是不是相等?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA比较两个字符串是不是相等用啥

java中如何比较两个数组确定是不是相等?

Java 从键盘输入String 用 equals 比较出错

java中如何判断两个变量相等

Java中怎么比较两个字符串是不是相等?

java判断字符串,为啥用"=="做不了判断