//import java.util.*;
class Person {
String name;
int age;/*
public boolean equals(Person []p1,Person []p2) {
if(p1.length!=p2.length) return false; 
for(int i=0;i<p1.length;i++) {
if(!p1[i].name.equals(p2[i].name)||p1[i].age!=p2[i].age) {
return false;
}
}
return true;
}*/
}
class TestA {
public static void main(String[]args) {
//int[]x = new int[]{4,5,6,6,5};
//int[]y = new int[]{4,5,6,6,5};
//System.out.println(Arrays.equals(x,y));
Person p1 = new Person();p1.name = "p1"; p1.age= 10;
Person p2 = new Person();p2.name = "p2"; p1.age= 20;
Person p3 = new Person();p3.name = new String("p1"); p3.age= 10;
Person p4 = new Person();p4.name = new String("p2"); p4.age= 20;

Person[]p = new Person[]{p1,p2};
Person[]z = new Person[]{p3,p4};

System.out.println(aquals(p,z));//==
}
public static boolean aquals(Person []p1,Person []p2) {
if(p1.length!=p2.length) return false; 
for(int j=0;j<p1.length;j++) {
p1[j]=new Person();
p2[j]=new Person();
}
for(int i=0;i<p1.length;i++) {
if(!p1[i].name.equals(p2[i].name)||p1[i].age!=p2[i].age) {//Exception in thread "main" //java.lang.NullPointerException at TestA.aquals(TestA.java:37)
return false;
}
}
return true;
}
}为什么会用空指针异常啊???

解决方案 »

  1.   

    for(int j=0;j<p1.length;j++) {
    p1[j]=new Person(); //你这里重新new Person,那么p1[j]的name不赋值的话初始值就是null
    p2[j]=new Person(); //同上
    }if(!p1[i].name.equals(p2[i].name)||p1[i].age!=p2[i].age) { //所以这里的p1[i].name是null,调用null.equals,当然出现空指针错误了
      

  2.   

    把这3行去掉之后
    for(int j=0;j<p1.length;j++) {
    p1[j]=new Person();
    p2[j]=new Person();
    }没有了错误,但判断还是有问题啊???应该是输入true但总是false
      

  3.   

    用这么麻烦啊?数据比较就int[]x = new int[]{4,5,6,6,5};
    int[]y = new int[]{4,5,6,6,5};

    System.out.println(Arrays.equals(x, y));你试试看就知道结果
      

  4.   

    判断两个数组内容相等用
    Arrays.equals()空指针是因为你下面的代码for (int j = 0; j < p1.length; j++) {
    p1[j] = new Person();
    p2[j] = new Person();
    }
      

  5.   

    那一行报空指针嘛,debug进去看
      

  6.   


     Person p2 = new Person();p2.name = "p2"; p1.age= 20;  应该是为p2.age赋值的,你却写成了p1
      

  7.   

    aquals方法的问题: public static boolean aquals(Person[] p1, Person[] p2) {
    if (p1.length != p2.length){
    return false;
    }
    for (int j = 0; j < p1.length; j++) {
    Person per1 = p1[j];
    Person per2 = p2[j];
    for (int i = 0; i < p1.length; i++) {
    if (!per1.name.equals(per2.name) || per1.age!=per2.age) {
    return false;
    }
    }
    }
    return true;
    }
      

  8.   

    晕,写错了不好意思,下面才是: public static boolean aquals(Person[] p1, Person[] p2) {
    if (p1.length != p2.length){
    return false;
    }
    for (int j = 0; j < p1.length; j++) {
    Person per1 = p1[j];
    Person per2 = p2[j];
    if (!per1.name.equals(per2.name) || per1.age!=per2.age) {
    return false;
    }
    }
    return true;
    }
      

  9.   

    好了,我告诉你到底是哪错了,找了半天bug,我还以为我的Jvm有毛病了呢:
    视野请转移到这里: Person p2 = new Person();
    p2.name = "p2";
    p1.age = 20; Person p2 = new Person();
    p2.name = "p2";
    p2.age = 20;
    /*去你的程序里面仔细看看,copy的时候下次注意点,这种错太不好找了,眼都看花了*/
    下面是改过的执行成功的代码class Person {
    String name;
    int age;
    }public class Test {
    public static void main(String[] args) {
    // int[]x = new int[]{4,5,6,6,5};
    // int[]y = new int[]{4,5,6,6,5};
    // System.out.println(Arrays.equals(x,y));
    Person p1 = new Person();
    p1.name = "p1";
    p1.age = 10;
    Person p2 = new Person();
    p2.name = "p2";
    p2.age = 20;
    Person p3 = new Person();
    p3.name = "p1";
    p3.age = 10;
    Person p4 = new Person();
    p4.name = "p2";
    p4.age = 20; Person[] p = new Person[] { p1, p2 };
    Person[] z = new Person[] { p3, p4 };

    Person[] px = {p1,p2};
    Person[] py = {p3,p4};
    System.out.println(aquals(px,py));
    System.out.println(aquals(p, z));// ==
    } public static boolean aquals(Person[] p1, Person[] p2) {
    boolean flag = false;
    if (p1.length != p2.length){
    return flag;
    }
    for (int j = 0; j < p1.length; j++) {
    System.out.println("for");
    Person per1 = p1[j];
    for(int i=0;i<p1.length;i++){
    Person per2 = p2[i];
    if (per1.name.equals(per2.name) && per1.age==per2.age) {
    flag=true;
    }
    }
    }
    /** 
     * 因为你无法保证数组之中第x个元素是一一对应的,所以有必要先for循环出一个数组的某个(假设为x)
     * 然后再用x和另外一个for循环全部数组去比较,如果有不相同的,则false
     */
    return flag;
    }
    }