public static void same(){//方法目的:将1000个数据赋值为1~999,只有一对数值是重复的,找出来?
Integer[] arr=new Integer[1000];//设置一个长度为1000的数组,值从1~1000
for(int i=0;i<arr.length-1;i++){
arr[i]=i+1;
}
arr[arr.length-1]=(int)(Math.random()*1000)+1;//把最后一个元素(即值为1000的数)改成随机值
System.out.println(Arrays.toString(arr));//可以看到最后一个随机数
Arrays.sort(arr);//递增排序
System.out.println(Arrays.toString(arr));//可以看到排序后随机数排到了合理的位置
for(int i=1;i<arr.length-1;i++){
System.out.println("i="+i+", arr[i]="+arr[i]+", arr[i-1]="+arr[i-1]);
int t=arr[i-1];
if((arr[i])==(arr[i+1])){//我的问题是就在这一行?????????????????
//为什么这里这样写就得不到正确的结果,而用t代换一下就可以得到正确结果?????????????
//为什么把==换成>=也就对了????????????????
//当然我知道把(arr[i+1])换成 i 是更高效也正确的,也知道别的方法
System.out.println(arr[i]);
break;
}
}
}

解决方案 »

  1.   

    我感觉应该从Integer与int之间的区别入手,对吗?
      

  2.   


    你说的没错,把Integer[] arr=new Integer[1000];换成
    int[] arr=new int[1000]; 也能正确,应该是自动打包自动解包不支持==吧
    毕竟 t=arr[i]会自动解包Integer成int
    arr[i] >= arr[i-1]由于存在比较 > 符号,所以也会自动解包
    但是 == 只是简单判断两边是否相等,由于是Integer对象,所以不可能相等
      

  3.   

    ==比较两个对象时是比较两个对象的引用是否相等,即是比较两个引用是否指向一个对象。
    至于关于Integer之间的>和<比较,都会自动解包的
      

  4.   

    具体可以看看这个
    http://stackoverflow.com/questions/1514910/when-comparing-two-integers-in-java-does-auto-unboxing-occur
      

  5.   

    两个Integer数据 判断相等 用equals
    按照你填加数据做法先将1-999添加进去 添加一个随机数,把随机数取出来不久知道是那个数据重复了?
      

  6.   

    恩,1楼正解。Integer是构建的是对象,两个对象比较用==则比较的是地址,所以你将
    if((arr[i])==(arr[i+1])){//我的问题是就在这一行?????????????????
    改成equals去比较。if(arr[i].equals(arr[i+1]))
      

  7.   

    既然用了Integer,就用它写好的方法比较大小,integer.compareTo()