今天写代码的时候,遇到一个奇怪的问题,就是判断两个数组是否相等的时候如果写成“if(arrayA[i] == arrayB[j])”的话,有的时候无法正常判断这两个数组元素是否相等,即使真的相等,也认为不相等,但是有的时候又可以正确判断(我在两个工程里面分别作了这种比较,发现在一个工程里面可以,而在另一个工程里面却不行),如果写成“if(arrayA[i].equals(arrayB[j]))”的话则可以正确判断出来,请问这两种写法区别在哪里呢?谢谢!

解决方案 »

  1.   

    这就是我写的代码,这段代码可以正确执行,判断数组是否相等,但是在另一个工程里面却无法判断
    package test1;public class Shuzu {
    public static void main(String[] args){
    String[][] allRecord = new String[17][4];
    String[][] menu = new String[17][2];
    allRecord[0][0] = "men1";
    allRecord[0][1] = "受注管理";
    allRecord[0][2] = "m101";
    allRecord[0][3] = "申込確認";
    allRecord[1][0] = "men1";
    allRecord[1][1] = "受注管理";
    allRecord[1][2] = "m105";
    allRecord[1][3] = "qweqweqweqweqweqweqweqweq";
    allRecord[2][0] = "men1";
    allRecord[2][1] = "受注管理";
    allRecord[2][2] = "m104";
    allRecord[2][3] = "dfsdfsdfsdfsdfsdfsdfsdf";
    allRecord[3][0] = "men1";
    allRecord[3][1] = "受注管理";
    allRecord[3][2] = "m103";
    allRecord[3][3] = "受注一括承認";
    allRecord[4][0] = "men1";
    allRecord[4][1] = "受注管理";
    allRecord[4][2] = "m102";
    allRecord[4][3] = "受注一覧"; 
    allRecord[5][0] = "men2";
    allRecord[5][1] = "仕入売上管理";
    allRecord[5][2] = "m202";
    allRecord[5][3] = "仕入一覧";
    allRecord[6][0] = "men2";
    allRecord[6][1] = "仕入売上管理";
    allRecord[6][2] = "m205";
    allRecord[6][3] = "";
    allRecord[7][0] = "men2";
    allRecord[7][1] = "仕入売上管理";
    allRecord[7][2] = "m204";
    allRecord[7][3] ="";
    allRecord[8][0] = "men2";
    allRecord[8][1] = "仕入売上管理";
    allRecord[8][2] = "m203";
    allRecord[8][3] = "";
    allRecord[9][0]= "men2";
    allRecord[9][1] = "仕入売上管理";
    allRecord[9][2] = "m201";
    allRecord[9][3] = "zxczxczxczxczxczxczxczczxc";
    allRecord[10][0] = "men3";
    allRecord[10][1] = "売上管理";
    allRecord[10][2] = "m302";
    allRecord[10][3] = "";
    allRecord[11][0] = "men3";
    allRecord[11][1] = "売上管理";
    allRecord[11][2] = "m301";
    allRecord[11][3] = "";
    allRecord[12][0] = "men3";
    allRecord[12][1] = "売上管理";
    allRecord[12][2] = "m303";
    allRecord[12][3] = "";
    allRecord[13][0] = "men4";
    allRecord[13][1] = "請求管理"; 
    allRecord[13][2] = "m402";
    allRecord[13][3] = "";
    allRecord[14][0] = "men4";
    allRecord[14][1] = "請求管理"; 
    allRecord[14][2] = "m403";
    allRecord[14][3] = "FBデータ取込";
    allRecord[15][0] = "men4";
    allRecord[15][1] = "請求管理"; 
    allRecord[15][2] = "m404";
    allRecord[15][3] = "入金一覧";
    allRecord[16][0] = "men4";
    allRecord[16][1] = "請求管理"; 
    allRecord[16][2] = "m401";
    allRecord[16][3] = "請求書作成";
    int count = 0;
    out:
    for (int i = 0; i < allRecord.length;i++){
    for(int j = 0; j < menu.length; j++){
    if(allRecord[i][0] == menu[j][0]){
    continue out;
    }
    }
    menu[count][0] = allRecord[i][0];
    menu[count][1] = allRecord[i][1];
    count += 1;
    }

    System.out.println("allRecord.length =="+allRecord.length);
    for (int i = 0; i < allRecord.length; i++){
    for (int j = 0; j < allRecord[i].length; j++){
    System.out.println("allRecord["+i+"]["+j+"]=="+allRecord[i][j]);
    }
    }

    System.out.println("menu.length =="+menu.length);
    for (int i = 0; i < menu.length; i++){
    for (int j = 0; j < menu[i].length; j++){
    System.out.println("menu["+i+"]["+j+"]=="+menu[i][j]);
    }
    }
    }
    }
      

  2.   

    ==是比引用 equals是比较内容。
    不过我也不知道用在数组元素的时候是比的哪个。。
      

  3.   

    对象之间比较实际内容用equals(),这是几乎每个类都有的方法,不然有可能比较引用了.
      

  4.   

    equals()比较的是值是否相等,而==比较的是地址是否相等.