第一段:
public static void main(String[] args) {
String str2 = new String("ja")+new String("va");
str2.intern();
String str1 = "java";
System.out.println(str2==str1);
}
执行完结果是false。
第二段,就把字符串从“java”改成“java1”
public static void main(String[] args) {
String str2 = new String("ja")+new String("va1");
str2.intern();
String str1 = "java1";
System.out.println(str2==str1);
}
这次执行结果就是true,jdk7和jdk8都试了。 
何解?

解决方案 »

  1.   

    我的两个都是false
      

  2.   

    理论上应该俩都是false,不过做下面调整就都是true了 String str2 = new String("ja")+new String("va");
    String strA = str2.intern();
    String str1 = "java";
    System.out.println(strA==str1); String str3 = new String("ja")+new String("va1");
    String strB =str3.intern();
    String str4 = "java1";
    System.out.println(str4==strB);
      

  3.   

    java==有毒 ->true
      

  4.   

    这个解释的比较详细
    https://blog.csdn.net/soonfly/article/details/70147205
      

  5.   

    理论上两个都应该是true吧,intern会检查当前的对象在对象池中是否有字面值相同的引用对象,如果有则返回池中对象,如果没有则放置到对象池中,并返回当前对象
      

  6.   

    stakflow有答案了,因为第一个 java正好是关键字,常量池里本来就有的。
    https://stackoverflow.com/questions/51626258/answer/submit
      

  7.   

    你用.eques()试试,== 比的是地址
      

  8.   

    一般应该都是false,除非两个字符指向的地址相同,才是true
      

  9.   

    你可用StringUtils的eques
      

  10.   


    我测也是两个false,Netbeans 测试,真的是两个false,就不贴图了,两个false。
      

  11.   

    stakflow有答案了,因为第一个 java正好是关键字,常量池里本来就有的。
    https://stackoverflow.com/questions/51626258/answer/submit点错了,给你了个踩
      

  12.   

    这是JAVA?
      

  13.   

    intern()是有返回值的,可是你没有用到。
      

  14.   

    结合各位叙述,整合了以下的代码(可能有点乱):
    public static void main(String[] args) {
    System.out.println("int测试:(关键字)");
    // 1和2 换以下上下顺序,结果都是false
    String s1u = new String("in") + new String("t");
    s1u.intern(); // 2
    String s2d = "int"; // 1
    System.out.println("语句2在上:" + (s1u == s2d)); String s1d = new String("in") + new String("t");
    String s2u = "int"; // 1
    s1d.intern(); // 2
    System.out.println("语句1在上:" + (s1d == s2u)); System.out.println("strer测试:");
    // 3和4 换以下上下顺序,3上 false 4上 true
    String s3u = new String("str") + new String("er");
    s3u.intern(); // 4
    String s4d = "strer"; // 3
    System.out.println("语句3在上:" + (s3u == s4d)); // false String s3d = new String("str") + new String("er");
    String s4u = "strer"; // 3
    s3d.intern(); // 4
    System.out.println("语句4在上:" + (s3d == s4u));
    }运行结果:
    int测试:(关键字)
    语句2在上:false
    语句1在上:false
    strer测试:
    语句3在上:true
    语句4在上:false
      

  15.   

    java是false的是因为,java是关键字,你可以用ctrl+鼠标左键试试,可以点到对应位置的,而java1是不可以 的
      

  16.   

    9版本的表示两个都是false,话说==还是避免使用.
      

  17.   

    java是个特殊词,不能被引用,比如说void一些等都是特殊词,都会发生异常
      

  18.   

    理论上应该俩都是false,不过做下面调整就都是true了
    Java code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String str2 = new String("ja")+new String("va");
    String strA = str2.intern();
    String str1 = "java";
    System.out.println(strA==str1);
     
    String str3 = new String("ja")+new String("va1");
    String strB =str3.intern();
    String str4 = "java1";
    System.out.println(str4==strB);