i<=j&&j<=i&&i!=j
现在只需使上面的条件为true就行,i,j都没定义,你们自己来定义,大家一起研究下,有什么好的建议?

解决方案 »

  1.   

    这是ibm的一道基础测试题,大家有兴趣的讨论下
      

  2.   

    我来试试.String i=new String("aaa");
    String j=new String("aaa");
      

  3.   

    对不起,我的是错的.String类是不能这么比较大小的.
      

  4.   

    import java.lang.*;
    public class Test
    {
    public static void main( String [] a)
    {
    Integer i=new Integer(1);
    Integer j=new Integer(1);
    System.out.print(i <= j && j <= i&& i != j);
    }
    }
      

  5.   

    呵呵,结果是true.原理是对象的比较比较的不是其值.
      

  6.   

    补充一下:
    对于"<=", JVM先调用了Integer.intValue(),然后使用if_icomgt对int进行比较.
    而对于"!=",则直接使用if_acomeq对reference进行比较
      

  7.   

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Integer i=new Integer(1);
    Integer j=new Integer(1);
    System.out.println(i.hashCode());
    System.out.println(j.hashCode());
    System.out.println(i<=j);
    System.out.println(j<=i);
    System.out.println(i!=j);
    System.out.print(i <= j && j <= i&& i != j); 
    }
    结果是
    1
    1
    true
    true
    true
    true
      

  8.   

    学习中支持(jingtao8177)
    楼上的程序只有在jdk1.5 以上的版本才能实现(原因:在这版本以上才有自动装箱拆箱),这是jdk的新特征!
      

  9.   

    新版本的.Integer可以直接<>比较值,但==,!=却用内存地址比较,实在觉得不妥.
    还不如用老版本的处理.
      

  10.   

    用Integer 的那几个 你们运行了没有?
                      System.out.println(i<=j);
    System.out.println(j<=i);
    System.out.println(i!=j);
    System.out.print(i <= j && j <= i&& i != j);
    根本通不过
      

  11.   

    技术天天更新,有愿意共同讨论学习JAVA的朋友加 QQ群:29252269
      

  12.   

    楼上的:
        Integer i=new Integer(1);
        Integer j=new Integer(1);
    这里定义了2个整形的对象,他们的值相同,但是他们的地址不同.
    就好象把2个一样的苹果放到2个不同的盒子里,盒子里的内容是相同的苹果,但盒子是不同的.
    i <= j 比较的是盒子里的苹果
    j <= i 还是比较盒子里的苹果
    i != j 这个比较的是盒子.以为对象的"!="比较,比较的是他们的地址.
      

  13.   


        int i=1;
        int j=1;
    i!=j  这里比较的是值,因为 int 是基本数据类型,不同于对象.他们的"!="比较的是值.
      

  14.   

    注意 int 和 Integer 的不同就是了
      

  15.   

    "<=", JVM先调用了Integer.intValue(),然后使用if_icomgt对int进行比较.其实就是比较两个值
    “==”"!=",则直接使用if_acomeq对reference进行比较  是比较两个reference
    这道题已经很清楚了
      

  16.   

    i.intValue() <= j..intValue()
    i<=j  相当于   i.intValue() <= j..intValue() 
      

  17.   

    System.out.println(i<=j); 比较的是他们的值,可以通过
    System.out.println(j<=i);同上
    System.out.println(i!=j);是作为对象把他们进行比较,比较的是内存地址,两个对象的地址是不一样的,可以通过
    System.out.print(i <= j && j <= i&& i != j);  SO :这个也可以通过!
    OVER~
      

  18.   

    你们用的jdk是多少?
    别老在这拿理论说事,去实践一下,我就纳闷了你们如果用jdk1.4.2 怎么能通过 i<=j?
    我运行的结果:
    b.java:10: operator <= cannot be applied to java.lang.Integer,java.lang.Integer
     System.out.println(i<=j);
                         ^
    b.java:11: operator <= cannot be applied to java.lang.Integer,java.lang.Integer
    System.out.println(j<=i);
                        ^
    b.java:13: operator <= cannot be applied to java.lang.Integer,java.lang.Integer
    System.out.print(i <= j && j <= i&& i != j);
                       ^
    b.java:13: operator <= cannot be applied to java.lang.Integer,java.lang.Integer
    System.out.print(i <= j && j <= i&& i != j);
      

  19.   

    那些说能通过的,把你们的jdk 报上来
      

  20.   

    上面都说过了,只有在jdk1.5以上的才能编译通过(自动装箱拆箱)实质就是
    对于引用类型(reference), JVM没有对应的"<="操作
    1.5以下编译直接报错
    1.5以上有自动装箱拆箱功能,对于Integer会自动调用Integer.intValue(),就是拆箱
    JVM指令中有对int类型的"<="操作, 其中一个是if_icomgt.
    所以最终的比较就变成两个int类型的比较.
    对于引用类型,JVM是有对应于"=="或"!="操作的,比如if_acomeq
    所以没有进行拆箱,而两个引用类型分别存放了两个对象的地址,所以自然是不相等的
      

  21.   

    补充一下 jdk 1.5 好像也通不过
    这个题目从逻辑上讲不可能为真, 看来 就是考察对java操作符的理解程度了
      

  22.   

    回复人:yanhongsan(cui) ( 一级(初级)) 信誉:100  2007-8-4 23:53:11  得分:0ps:我的jdk是1.4.2 
    ========================
    aa0123 使用了 JDK 1.5 以上版本才有的自动装拆箱功能,也就是说基本类型与包装类型可以自动转换。JDK 1.5 以下的版本没有这个功能。
      

  23.   

    这种特性,狂晕!觉得把i,j实现成类,重载
    <=
    !=
    操作符也能实现
      

  24.   

    yztommyhc(老六) ( ) 信誉:100  2007-8-4 12:14:40  得分: 0  
     
     
       
    我来试试.String i=new String("aaa");
    String j=new String("aaa");
    string不能进行如上比较
      
     
      

  25.   

    个人感觉本题的目的不是考验jdk1.5的新特性,既然是基础,考的应该是重载.
      

  26.   

    呵呵,大家可以在1.5下试一下这个:
    Integer i1 = 211;
    Integer i2 = 211;
    System.out.println(i1==i2);
    System.out.println(i1<=i2&&i1<=i2&&i1!=i2);
    Integer i3 = 11;
    Integer i4 = 11;
    System.out.println(i3==i4);
    System.out.println(i3<=i4&&i4<=i3&&i3!=i4);
    尽管有自动装箱,但是在处理-128到127的数字时还是和别的数字不一样的.
      

  27.   

    to:  xstom19(hh)
    前面讨论的是使用
    Integer i1 = new Integer(211);
    Integer i2 = new Integer(211);
    Integer i3 = new Integer(11);
    Integer i4 = new Integer(11);
    这种形式
    但是如果是
    Integer i3 = 11;这种形式
    相当于Integer i3 = Integer.valueOf(11);
    对于valueOf这个方法源代码是这样定义的public static Integer valueOf(int i) {
    final int offset = 128;
    if (i >= -128 && i <= 127) { // must cache 
        return IntegerCache.cache[i + offset];
    }
            return new Integer(i);
        }也就是说在-128到127之间的数要被缓存,所以
    Integer i3 = 11;
    Integer i4 = 11;
    i3,和i4的地址是一样的.
      

  28.   

    哈哈,IBM竟然拿书上的东西来骗人啊前些天刚好看过。。
    不过这个都是基本概念了
    申明为
    Integer i=new Integer(0);
    Integer j=new Integer(0);
    就可以了和我们原来总是问的两个string 的比较的问题类似