string[] str1 = {"1"};
string[] str2 = {"1"};
system.out.println(str1.equals(str2));
输出是false,可是我想让它的equals为true,有什么办法?

解决方案 »

  1.   

    String[] str1 = {"1"};
    String[] str2 = str1;
    System.out.println(str1.equals(str2)); 这样才会是true
    你那样指向不同对象 equals 不会true
    除非你自己定义数组,自己写equals方法定义规则
      

  2.   

    你这个str1 和 str2都是数组对象,对象的equals方法是比较地址,这明显两个对象,肯定地址不同。如果要equals返回true的话,你可以重写equals方法。重写为值相等就返回true。就像String类的equals方法。它是重写了的。你参考String类的equals方法写。
      

  3.   

    有这样一个map : map<string[],integer>,如何保证对于数组s
    如果key中有数据相等的数组,则s对应的integer加1;
    如果没有,则map.put(s,1).
      

  4.   


    public static void main(String[] args) {
    String[] str1 = {"1"};
    Map<String[],Integer> map = new HashMap<String[],Integer>();
    if(map.containsKey(str1)){
    map.put(str1,map.get(str1)+1);
    }else {
    map.put(str1,1);
    }
    }这个?
      

  5.   

    看API,这个方法也是用原始的equals方法比较的,不能得到满意的效果。
      

  6.   

    问题解决了,期待更好的方法。
    public String[] comparperd(String[] s){
    Integer n = new Integer(s.length);
    Set<String[]> set = kMap.get(n);
    if(set != null){
    Iterator<String[]> it = set.iterator();
    while(it.hasNext()){
    String[] s1 = it.next();
    if(Arrays.equals(s, s1)){
    return s1;
    }
    }
    }
    return null;
    }public void addToSupMap(String[] s){

    //System.out.println("the n is " + n);
    String[] temp = this.comparperd(s);
    String[] s1 = temp!= null?temp:s;
    Integer n = supMap.get(s1);
    if(n == null){
    supMap.put(s1, 1);
    }else{
    supMap.put(s1, n + 1);
    }
    }
      

  7.   

    自定义一个对象,重载equals()方法
      

  8.   

    数组对比使用如下方法:
         String[] str1 = {"1"};
         String[] str2 = {"1"};
         //System.out.println(str1.equals(str2));
         System.out.println(Arrays.equals(str1, str2));
      

  9.   

    如果要满足上述的需求,可以写一个类包含一个String[]的实例属性,然后重写equals方法和hashcode方法。例如class Key{
        private String[] str;
        public boolean equals(Key){
            //遍历Key.str看是否与本对象的str一一相等
        }
        public long hashcode(){
            //具体就是按照String生成hashcode的方法
            long code=0L;
            for(int i=0;i<this.str.length;i++)
                code+=code*31+str[i].hashcode();
            return code;
        }
    }这样就可以用Key封装String[]作为HashMap的键
      

  10.   


    正解,数组有自己的equals方法
      

  11.   

    如果放到map里还要考虑hashcode的问题。
      

  12.   

    不知道怎么简单一点,不想再封装一层了,能不能写一个类继承hashmap,重写它的相关方法?
      

  13.   

    看的我糊里糊涂.....
    System.out.println(Arrays.equals(str1, str2));-----很喜欢这个~~
      

  14.   

    equals()比较的是在内存中的地址而数组是引用类型 
    应该是这样的:
    String[] s1 = {"1"};
    String[] s2 = str1;
    System.out.println(s1.equals(s2)); 
      

  15.   

    str1[0].equals(str2[0]);呵呵额,
    其实重写 equals 就可以