• ~~
    2019-10-20
    我试了一下,好像用输入的方式S1==S2就是false,不管输入的长短都是false,如果直接赋值的话就算是特别长也是true

    作者回复:
    这是Java虚拟机对字符串的优化,具体的行为可能是因不同的jdk版本而不同。

    
    
  • Mr.z
    2019-08-01
    源代码:
    @Test
        public void test() {
            scanner = new Scanner(System.in);
            System.err.println("请输入str1");
            String str1 = scanner.nextLine();
            System.err.println("请输入str2");
            String str2 = scanner.nextLine();
            System.err.println("str1 == str2 :" + (str1 == str2));
            System.err.println("str1 equals str2 :" + (str1.equals(str2)));
        }
    执行结果:
    请输入str1
    abc
    请输入str2
    abc
    str1 == str2 :false
    str1 equals str2 :true

    之前字符串的比较都是用的equals ,听你说jdk优化了== 所以想测试一下,发现我的执行结果和你的并不一样,哈哈,果然薛定谔的Tomcat。
    展开

    作者回复: 其实不是jdk优化了==,而是jdk尽力优化了String对象的创建,减少重复创建相同的对象。Integer这些也是一样的

     1
    
  • Mr.z
    2019-07-31
    我在eclipse里面使用jdk1.8 192 和 openjdk 11 里面执行程序 == 也是 false ,即便只有一个字符。

    作者回复: 源代码来一套看看? 字符串 == 比较确实是和JDK具体的实现先相关的,出于学习的目的可以这么深究一下,但是真正写代码的时候,不要依赖于== 返回true或者false,可以认为 == 的结果是薛定谔的tomcat

    
    
我们在线,来聊聊吧