suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Java:判断字符串相等

PHPzPHPz2803 Tage vor958

Antworte allen(5)Ich werde antworten

  • 黄舟

    黄舟2017-04-18 10:48:45

    String a = new String("abc");
    a = a.intern();
    
    String b = "abc";
    
    if (a == b) {
        System.out.println("相等");
    } else {
        System.out.println("不等");
    }

    你是调用了a.intern()方法,但是你又没有将返回结果重新赋值,a还是原来那个a

    Antwort
    0
  • ringa_lee

    ringa_lee2017-04-18 10:48:45

    字符串相等用 equals() 判断,Java 中这个题都考烂了哒!

    Antwort
    0
  • PHPz

    PHPz2017-04-18 10:48:45

    a.intern();不会改变a字符的引用,他有个返回值。
    下面这样才会相等

    String b = a.intern();

    Antwort
    0
  • ringa_lee

    ringa_lee2017-04-18 10:48:45

    String a = new String("abc");
    

    这里的a和"abc"是两个对象,当调用 intern 方法时,字符常量池中已经包含一个等于此对象的字符串了,所以intern这个方法调用等于没用,即使后面b="abc",b和a也不是同一个对象。

    想要输出相等的话,要么第一句变成:

    String a = "abc";

    要么第二句变成:

    a = a.intern();
    

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-18 10:48:45

    首先要知道一点是==操作判断的是:是否a,b两个对象或基本类型指向同一内存区域

    String的底层实现是
    private final value[]
    String实例化时,实际上是通过System.arraycopy划分一段连续内存保存char数组。

    new String("abc")实际上不推荐这种方法初始化String,实际实现起来比 a = "abc"多了一个步骤,底层步骤是

    1. 划分内存空间,创建临时数组temp

    2. temp[0] = 'a';temp[1] = 'b';temp[2] = 'c';

    3. 创建数组value ,将value所指内存空间指向temp指向的内存空间,即 &value = &temp(若使用a = "abc"则不需要这步)

    intern方法是jdk1.5提供的方法,用于内存优化的,相同String引用共同内存空间,实际上就是上述的第三步。这里若要a,b相等,可以写为

    String a = "abc";
    String b = "abc".intern(); 或者String b = a.intern();

    实际上 进行的操作就是上述的第三步,即 b = a;

    String b = "abc"实际的底层实现是:

    1. 划分内存空间,创建数组value

    2. value[0] = a.value[0];value[1] = a.value[0]';value[2] = a.value[0];

    第二步中,String b中value[0]中的String a中的value[0]实际中指向的是同一个内存地址,因此实际上b.value[0] = a.value[0] = 'a',但b.value 不等于a.value,根本原因在于指向内存区域不同

    推荐看一下String的源码分析
    【JAVA源码分析——Java.lang】String源码分析

    Antwort
    0
  • StornierenAntwort