Странное присваивание строки phnomenon в Java - PullRequest
0 голосов
/ 05 января 2012
public static void main(String[] args){

/* lots of codes */

    if(profile.addFriend(buffernametwo)){
      boolean a = profile.addFriend(buffernametwo);
      System.out.println(a); 
     //prints false; however if I directly put profile.addFriend(buffernametwo) 
     //and follow the debugger, it will appear true

      /* lots of codes */

    }
/* lots of codes */

//the following method is in a different class

public boolean addFriend(String friend) {

        for(int i = 0;i < profile_friend.size();i++){
        //Here is the point
            if(friend == profile_friend.get(i)){
                return false;
            }
        }
        profile_friend.add(friend);
        return true;

/* lots of codes */

private ArrayList<String> profile_friend = new ArrayList<String>();

}

Вопрос в комментарии кода

Ответы [ 2 ]

3 голосов
/ 05 января 2012

В Java есть пул строк, поэтому здесь они совпадают по ссылке.Но вы не должны полагаться на это и всегда использовать equals() при сравнении строк.

0 голосов
/ 05 января 2012

Поскольку == сравнивает ссылки, и оба abc и bcd указывают на две одинаковые ячейки памяти. Функция equals(), предложенная @jan Zyka, является правильным вариантом для сравнения двух разных строк.

Однако если вы намеренно хотите, чтобы и abc, и bcd указывали на одну и ту же область памяти, вы можете использовать intern() метод класса String ... читать документацию здесь .

...