import java.io.*;class Test 
{
public static void main(String[] args) 
{
int i = 4;
int j = 4;
System.out.println(i == j);
// System.out.println(i.compareTo(j)); Integer a = new Integer(5);
Integer b = new Integer(5);
System.out.println(a == b);
// System.out.println(a.compareTo(b)); String x = "6";
String y = "6";
System.out.println(x == y);
// System.out.println(x.compareTo(y));
}
}
程序的结果是
true
false
true

解决方案 »

  1.   

    java不能重载运算符==直接比较的是变量的值    compareTo比较的是引用的对象的值
      

  2.   

    一般只用 == 来比较 int, float, double等基本类型的数据比较对象时用compareTo
      

  3.   

    JAVA中的数据类型分为基本类型(简单类型)和复合类型(引用类型),基本型别有8个,byte、short、char、int、long、double、float、boolean,复合类型指得就是对象,包括String。==属于运算符,是不能被重载的,如果用来比较基本类型那么比较的就是基本类型的值;用来比较复合类型的话比较的其实就是引用对象的地址,如果你明白对象在内存中是如何创建和引用对象是如何指向对象内存地址的话这些是很好理解的JAVA中创建对象的关键字是new,也就是说遇到new就创建了一个新的对象,Integer a = new Integer(5);和Integer b = new Integer(5);创建了两个不同的对象,虽然对象中存储的值是一样的,而a和b就是分别指向这两个对象的引用(也叫句柄),两个对象地址不同,当然==比较后的返回的就是falseString x = "6";String y = "6";并没有用new创建新的对象,所以它们指向的对象是同一个,返回true关于compareTo,没有找到有比较基本类型的,但是看文档我没有看懂,直接找得源代码
    public int compareTo(Integer anotherInteger) {
      int thisVal = this.value;
      int anotherVal = anotherInteger.value;
      return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
    }
    这个是java.lang.Integer中的public int compareTo(String anotherString) {
      int len1 = count;
      int len2 = anotherString.count;
      int n = Math.min(len1, len2);
      char v1[] = value;
      char v2[] = anotherString.value;
      int i = offset;
      int j = anotherString.offset;  if (i == j) {
        int k = i;
        int lim = n + i;
          while (k < lim) {
          char c1 = v1[k];
          char c2 = v2[k];
          if (c1 != c2) {
            return c1 - c2;
          }
          k++;
        }
      } else {
        while (n-- != 0) {
          char c1 = v1[i++];
          char c2 = v2[j++];
          if (c1 != c2) {
            return c1 - c2;
          }
        }
      }
      return len1 - len2;
    }
    这个是java.lang.String中的,看了源代码后楼主应该明白输出结果为什么都是0了
      

  4.   

    大多数情况下用
     == 来比较 int, float, double基本数据类型比较对象时则用compareTo
    另外java不能重载运算符有一个例外就是=
      

  5.   

    ==是用来比较基本数据类型的值是否相等,比如int型 float型 double型
    compare To比较的是比较引用的对象是否相同