很有意思的一道题!!!! i<=j&&j<=i&&i!=j现在只需使上面的条件为true就行,i,j都没定义,你们自己来定义,大家一起研究下,有什么好的建议? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是ibm的一道基础测试题,大家有兴趣的讨论下 我来试试.String i=new String("aaa");String j=new String("aaa"); 对不起,我的是错的.String类是不能这么比较大小的. 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); }} 呵呵,结果是true.原理是对象的比较比较的不是其值. 补充一下:对于"<=", JVM先调用了Integer.intValue(),然后使用if_icomgt对int进行比较.而对于"!=",则直接使用if_acomeq对reference进行比较 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); }结果是11truetruetruetrue 学习中支持(jingtao8177)楼上的程序只有在jdk1.5 以上的版本才能实现(原因:在这版本以上才有自动装箱拆箱),这是jdk的新特征! 新版本的.Integer可以直接<>比较值,但==,!=却用内存地址比较,实在觉得不妥.还不如用老版本的处理. 用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);根本通不过 技术天天更新,有愿意共同讨论学习JAVA的朋友加 QQ群:29252269 楼上的: Integer i=new Integer(1); Integer j=new Integer(1);这里定义了2个整形的对象,他们的值相同,但是他们的地址不同.就好象把2个一样的苹果放到2个不同的盒子里,盒子里的内容是相同的苹果,但盒子是不同的.i <= j 比较的是盒子里的苹果j <= i 还是比较盒子里的苹果i != j 这个比较的是盒子.以为对象的"!="比较,比较的是他们的地址. 而 int i=1; int j=1;i!=j 这里比较的是值,因为 int 是基本数据类型,不同于对象.他们的"!="比较的是值. 注意 int 和 Integer 的不同就是了 "<=", JVM先调用了Integer.intValue(),然后使用if_icomgt对int进行比较.其实就是比较两个值“==”"!=",则直接使用if_acomeq对reference进行比较 是比较两个reference这道题已经很清楚了 i.intValue() <= j..intValue()i<=j 相当于 i.intValue() <= j..intValue() 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~ 你们用的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.IntegerSystem.out.println(j<=i); ^b.java:13: operator <= cannot be applied to java.lang.Integer,java.lang.IntegerSystem.out.print(i <= j && j <= i&& i != j); ^b.java:13: operator <= cannot be applied to java.lang.Integer,java.lang.IntegerSystem.out.print(i <= j && j <= i&& i != j); 那些说能通过的,把你们的jdk 报上来 上面都说过了,只有在jdk1.5以上的才能编译通过(自动装箱拆箱)实质就是对于引用类型(reference), JVM没有对应的"<="操作1.5以下编译直接报错1.5以上有自动装箱拆箱功能,对于Integer会自动调用Integer.intValue(),就是拆箱JVM指令中有对int类型的"<="操作, 其中一个是if_icomgt.所以最终的比较就变成两个int类型的比较.对于引用类型,JVM是有对应于"=="或"!="操作的,比如if_acomeq所以没有进行拆箱,而两个引用类型分别存放了两个对象的地址,所以自然是不相等的 补充一下 jdk 1.5 好像也通不过这个题目从逻辑上讲不可能为真, 看来 就是考察对java操作符的理解程度了 回复人:yanhongsan(cui) ( 一级(初级)) 信誉:100 2007-8-4 23:53:11 得分:0ps:我的jdk是1.4.2 ========================aa0123 使用了 JDK 1.5 以上版本才有的自动装拆箱功能,也就是说基本类型与包装类型可以自动转换。JDK 1.5 以下的版本没有这个功能。 这种特性,狂晕!觉得把i,j实现成类,重载<=!=操作符也能实现 yztommyhc(老六) ( ) 信誉:100 2007-8-4 12:14:40 得分: 0 我来试试.String i=new String("aaa");String j=new String("aaa");string不能进行如上比较 个人感觉本题的目的不是考验jdk1.5的新特性,既然是基础,考的应该是重载. 呵呵,大家可以在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的数字时还是和别的数字不一样的. 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的地址是一样的. 哈哈,IBM竟然拿书上的东西来骗人啊前些天刚好看过。。不过这个都是基本概念了申明为Integer i=new Integer(0);Integer j=new Integer(0);就可以了和我们原来总是问的两个string 的比较的问题类似 JDK1.5中String.replace()的实现有点奇怪 问个很简单的java问题! 今天面试,面试官出了这么一道题目 JTable加载显示数据 J2se 5.0 相对 j2se 1.4 在性能上有提高吗 java多形性的问题 非常奇怪的问题,高手请做答! 请教高手,关于java程序内存分配的问题。 大神:如果一个菜鸟想编写一个可以浏览自己电脑盘上的一些文件的程序 用java该用到哪些知识点?如何编写 同志们,解决了此问题一定给分,不然我不是人!!! 关于在jsp页面写java代码的问题? java中如何判断String中输入的是数字?
String j=new String("aaa");
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);
}
}
对于"<=", JVM先调用了Integer.intValue(),然后使用if_icomgt对int进行比较.
而对于"!=",则直接使用if_acomeq对reference进行比较
// 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
楼上的程序只有在jdk1.5 以上的版本才能实现(原因:在这版本以上才有自动装箱拆箱),这是jdk的新特征!
还不如用老版本的处理.
System.out.println(i<=j);
System.out.println(j<=i);
System.out.println(i!=j);
System.out.print(i <= j && j <= i&& i != j);
根本通不过
Integer i=new Integer(1);
Integer j=new Integer(1);
这里定义了2个整形的对象,他们的值相同,但是他们的地址不同.
就好象把2个一样的苹果放到2个不同的盒子里,盒子里的内容是相同的苹果,但盒子是不同的.
i <= j 比较的是盒子里的苹果
j <= i 还是比较盒子里的苹果
i != j 这个比较的是盒子.以为对象的"!="比较,比较的是他们的地址.
int i=1;
int j=1;
i!=j 这里比较的是值,因为 int 是基本数据类型,不同于对象.他们的"!="比较的是值.
“==”"!=",则直接使用if_acomeq对reference进行比较 是比较两个reference
这道题已经很清楚了
i<=j 相当于 i.intValue() <= j..intValue()
System.out.println(j<=i);同上
System.out.println(i!=j);是作为对象把他们进行比较,比较的是内存地址,两个对象的地址是不一样的,可以通过
System.out.print(i <= j && j <= i&& i != j); SO :这个也可以通过!
OVER~
别老在这拿理论说事,去实践一下,我就纳闷了你们如果用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);
对于引用类型(reference), JVM没有对应的"<="操作
1.5以下编译直接报错
1.5以上有自动装箱拆箱功能,对于Integer会自动调用Integer.intValue(),就是拆箱
JVM指令中有对int类型的"<="操作, 其中一个是if_icomgt.
所以最终的比较就变成两个int类型的比较.
对于引用类型,JVM是有对应于"=="或"!="操作的,比如if_acomeq
所以没有进行拆箱,而两个引用类型分别存放了两个对象的地址,所以自然是不相等的
这个题目从逻辑上讲不可能为真, 看来 就是考察对java操作符的理解程度了
========================
aa0123 使用了 JDK 1.5 以上版本才有的自动装拆箱功能,也就是说基本类型与包装类型可以自动转换。JDK 1.5 以下的版本没有这个功能。
<=
!=
操作符也能实现
我来试试.String i=new String("aaa");
String j=new String("aaa");
string不能进行如上比较
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的数字时还是和别的数字不一样的.
前面讨论的是使用
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的地址是一样的.
不过这个都是基本概念了
申明为
Integer i=new Integer(0);
Integer j=new Integer(0);
就可以了和我们原来总是问的两个string 的比较的问题类似