如下题:
Integer i = new Integer (42);
Long 1 = new Long (42);
Double d = new Double (42.0); Which two expressions evaluate to True? (Choose Two) A.(i ==1)
B.(i == d)
C.(d == 1)
D.(i.equals (d))
E.(d.equals (i))
F.(i.equals (42))
equals比较的是对象的内容, 该怎么理解?
F.(i.equals (42)) 中,i指向的是new Integer (42); 而42就是一个数值,它们如何相等??
Integer i = new Integer (42);
Long 1 = new Long (42);
Double d = new Double (42.0); Which two expressions evaluate to True? (Choose Two) A.(i ==1)
B.(i == d)
C.(d == 1)
D.(i.equals (d))
E.(d.equals (i))
F.(i.equals (42))
equals比较的是对象的内容, 该怎么理解?
F.(i.equals (42)) 中,i指向的是new Integer (42); 而42就是一个数值,它们如何相等??
解决方案 »
- Java的底层是用什么语言写的?
- 关于socket.getInputStream()和getOutputStream()的理解
- Java小问题一个 帮忙解释一下
- 那位大侠指导一下这种代码应该如何改善?
- 鼠标双击事件改变了linkedlist里面数据的顺序??
- Frame和Panel有何区别
- 请大虾帮我看看这段AWT程序,为什么运行的时候只生成了一个没有名字的白窗口
- 怎么使用JDK中的JDBC-ODBC桥创建数据源?????明天交作业了,急!!!!!!!
- 打印问题: 不显示打印设置画面, 直接打印如何实现?
- 关于Java中package语句的使用和相关配置问题
- insert语句插入报错 原因 Unable to convert between java.util.Date and JAVA_OBJECT
- java 读取,删除FTP服务上指定目录下的文件
只有最后一个正确
至于为什么,你看看下面一行代码就知道了
Integer i=(Integer)42;
编译不会出错的哦
你的意思是否是: 在作equals时(F.(i.equals (42)) )会作强制类型转换还望解答
你的意思是否是: 在作equals时(F.(i.equals (42)) )会作强制类型转换还望解答
是因为编译的时候做auto-boxing(好像可以叫自动打包吧)了
把42打包成一个Integer的对象了
而Integer的equals的源码是:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}所以就返回true了
回答完毕!
例如:
Integer i = new Integer(10);
Integer j = new Integer(10);
如果使用i.equals(j),则结果是ture 因为对象里存的都是10
而如果使用i == j,则结果是false,i,j是引用 它们指向一个对象,保存的是各自对象在heap中的地址,这当然不同。接下来再回答你这句话:F.(i.equals (42)) 中,i指向的是new Integer (42); 而42就是一个数值,它们如何相等??
equals比较的是对象的内容,JDK1.5版本增加了自动打包跟自动解包的内容,
Integer i = new Integer(5);
Integer i = 5;
这两句在效果上是一样的.
对于基本类型:编译器会把“整数”视为"int"类型, "小数"视为"double"类型,能否自动转化还要看它们之间是否兼容;
int i=1; //编译器默认把整数视为int类型
double d=1; //编译器默int类型自动转为double类型;
double d=1.0; //编译器默认的小数为double类型 float f=1.0 ;出错, double类型转化为float类型时,精度减少,报错
float f=1.0f 正确
------------
对于基本类型的包装类:编译器会把“整数”视为"Interger"类型, "小数"视为"Double"类型,只允许类型匹配 Integer i=1; 正确
Long i= 1; 错误,因Interger不能自动转为Long; ------------- 以上的理解是否正确??
正确吧?