如何在java中比较int数组

时间:2016-04-03 09:44:42

标签: java arrays

当我尝试比较两个int数组时,尽管它们完全相同,但if(one == two)中的代码仍然没有被执行。为什么是这样?

    Object[] one = {1,2,3,4,5,6,7,8,9};

    Object[] two = {1,2,3,4,5,6,7,8,9};

    if (one == two){
        System.out.println("equal");
    } else {

        System.out.println("not equal ");
    }

6 个答案:

答案 0 :(得分:3)

这里需要注意的一些事项:

  • ==比较引用,而不是值。 。 。也就是说,您要问的是这两个数组是否是完全相同的实例,而不是它们是否包含相同的值。
  • 您使用==这一事实意味着您可能不了解equals()上的Object方法。这是您解决当前问题所需的方法,但请注意,通常,当您比较两个对象的值时,您应该使用obj1.equals(obj2) ,而不是obj1 == obj2。现在== 确实使用int之类的原语(例如普通的x == 3等),所以也许这就是你使用它的原因,但我只想确保您了解equals()==
  • 在过去的旧时代(1998年之前),你必须比较两个数组的每个元素对。现在,您可以在Arrays.equals()类上使用静态java.util.Arrays方法。对于所有基本类型(对于每个元素对使用==)和Object(对于每对对,它最明确地使用equals()来说,此方法会被重载。)

答案 1 :(得分:2)

/** * Removes all functions matching given function name mask * * @param p_name_mask Mask in SQL 'like' syntax * @param p_opts Combination of comma|space separated options: * trace - output SQL to be executed as 'NOTICE' * dryrun - do not execute generated SQL * @returns Generated SQL 'drop functions' string */ CREATE OR REPLACE FUNCTION mypg_drop_functions(IN p_name_mask text, IN p_opts text = '') RETURNS text LANGUAGE plpgsql AS $$ DECLARE v_trace boolean; v_dryrun boolean; v_opts text[]; v_sql text; BEGIN if p_opts is null then v_trace = false; v_dryrun = false; else v_opts = regexp_split_to_array(p_opts, E'(\\s*,\\s*)|(\\s+)'); v_trace = ('trace' = any(v_opts)); v_dryrun = ('dry' = any(v_opts)) or ('dryrun' = any(v_opts)); end if; select string_agg(format('DROP FUNCTION %s(%s);', oid::regproc, pg_get_function_identity_arguments(oid)), E'\n') from pg_proc where proname like p_name_mask into v_sql; if v_sql is not null then if v_trace then raise notice E'\n%', v_sql; end if; if not v_dryrun then execute v_sql; end if; end if; return v_sql; END $$; select mypg_drop_functions('fn_dosomething_%', 'trace dryrun'); 运算符对对象(哪个数组是)进行引用相等性检查。如果数组元素是原始的(如==),则可以使用java.util.Arrays.equals。如果它们本身就是对象,java.util.Arrays.deepEquals将进行深度相等测试(假设数组中的对象提供了int的合适覆盖。

答案 2 :(得分:2)

你可以这样做:

public boolean compareArrays(int[] a, int[] b) {
    boolean check = true;
    if (a!= null && b!= null){
      if (a.length != b.length){
          check= false;
      }else
          for (int i = 0; i < b.length; i++) {
              if (b[i] != a[i]) {
                  check= false;    
              }                 
        }
    }else{
      check= false;
    }
    return check;
}

或者你可以这样做:

boolean areEqual = Arrays.equals(Arrays.sort(arr1), Arrays.sort(arr2));

答案 3 :(得分:1)

您正在比较参考文献。将内容与:Arrays.equals(one, two)

进行比较

答案 4 :(得分:1)

如果你这样做:

if (one == two){

然后哟正在比较2个数组的引用而不是它们的内容,这是错误的。

改为

Arrays.equals(one, two)

答案 5 :(得分:1)

==运算符比较引用,而不是在java中扩展Object的所有内容的实际值。这种方法仅适用于基元。