Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java字符串输出混乱_Java_String - Fatal编程技术网

Java字符串输出混乱

Java字符串输出混乱,java,string,Java,String,我在一次采访中被问到这个问题,我说两者都会返回false。 但是当我交叉检查的时候 一个是真的,另一个是假的 有人能解释一下吗 String s1 = "H"; String s2 = "e"; String s3 = s1+s2; String s4 = "He"; System.out.println(s3 == s4);//false String s5="h"; String

我在一次采访中被问到这个问题,我说两者都会返回false。 但是当我交叉检查的时候 一个是真的,另一个是假的

有人能解释一下吗

        String s1 = "H";
        String s2 = "e";
        String s3 = s1+s2;
        String s4 = "He";
        System.out.println(s3 == s4);//false

        String s5="h";
        String s6="h";
        System.out.println(s5 == s6);//true
不能在字符串上使用==,需要使用String.equals函数。 您可以这样使用它:

        String s1 = "H";
        String s2 = "e";
        String s3 = s1+s2;
        String s4 = "He";
        System.out.println(s3.equals(s4));//false

        String s5="h";
        String s6="h";
        System.out.println(s5.equals(s6));//true

字符串比较需要使用

string.equals函数==比较引用


s5==s6返回true,因为h是一个常数,我怀疑答案是正在使用字符串池,因为字符串经常被重复使用,它们有时被分配相同的内存块。因此,在初始化时为s5和s6分配相同的值将为它们分配相同的地址,而将一个字符串指定为两个其他字符串的串联将始终生成一个新地址

String s3 = s1+s2;
该字符串在运行时实现,并在堆中创建该字符串的引用。 当我们使用+运算符连接字符串时,JVM返回新的StringBuilderstring….toString

在第二种情况下

String s5="h";
String s6="h";
s5和s6都在编译时解析,并指向相同的引用常量池

帮助:

使用String.equalString其他函数来比较字符串,而不是==运算符

函数检查字符串的实际内容,==运算符检查对对象的引用是否相等。请注意,字符串常量通常是插入式的,因此具有相同值的两个常量实际上可以与==进行比较,但最好不要依赖于此


如果对象地址相同,==运算符返回true。在编译时,所有相同的文本字符串都被缩减为同一个字符串对象。因此:

String s1 = "A";
String s2 = "A"; // s1 == s2: points to the same address as s1

String s3 = "AA"
String s4 = s1+s2; // s3 != s4: the literal "AA" is a different object

String.equals比较字符串值,而不是地址。

使用.equals而不是==@Salah OP比较字符串需要知道原因。第二个是真的,因为Java使用了一种称为@s的技术ᴜʀᴇsʜᴀᴛᴛᴀ 这只是一个注释。为什么它在2-1的情况下引用相同的内存位置???你能简要解释一下字符串池吗?这里你指的是常数poolRatika,这里你指的是常数poolRatika