scjp 包装类的三个基础问题,不知道有人会么?

wren4255 2008-04-01 02:30:42
  Given:
  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))
  Answer: D, E

1。f为什么不对呢?
2。(i.equals (1))对么??
3。(i.equals (d))和 (d.equals (i)) 有什么区别??
...全文
134 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Coder211 2008-04-01
  • 打赏
  • 举报
回复
想各位高手学习了!
isk_java 2008-04-01
  • 打赏
  • 举报
回复
自动把基础类型打包为对象!
isk_java 2008-04-01
  • 打赏
  • 举报
回复
觉得10楼说得有道理!
knight14 2008-04-01
  • 打赏
  • 举报
回复
public static void main(String[] args){
Integer i = new Integer (42);
Integer j = new Integer (42);
Long l = new Long (42);
Double d = new Double (42.0);
// System.out.println(i==l); //编译错误
// System.out.println(i==d); //编译错误
// System.out.println(d==l); //编译错误
System.out.println("i.equals(d)="+i.equals(d));
System.out.println("i.equals(l)="+i.equals(l));
System.out.println("l.equals(d)="+l.equals(d));
System.out.println("d.equals(i)="+d.equals(i));
System.out.println("i.equals(42)="+i.equals(42));
}
输出
i.equals(d)=false
i.equals(l)=false
l.equals(d)=false
d.equals(i)=false
i.equals(42)=true

wren4255 2008-04-01
  • 打赏
  • 举报
回复
public static void main(String[] args)
{
Double a=new Double(1);
Double b =new Double(1);
if (a.equals(b)) {
System.out.println("i am success!!!!");
}
}
}

好用啊??
wren4255 2008-04-01
  • 打赏
  • 举报
回复
是为什么返回是true,a又不是Integer型!!
wren4255 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bao110908 的回复:]
看看 Integer#equals 的源代码:


Java codepublic boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
[/Quote]

请问为什么
public static void main(String[] args)
{
String a = "123";
String b = "123";
if (a.equals(b)) {
System.out.println("i am success!!!!");
}
}
可以编译??
psyl 2008-04-01
  • 打赏
  • 举报
回复
jason_zzw 你有没有亲自运行一下测试代码 i.equals(42)结果是true!

当你把42加上 “”双引号之后它会被当作字符串来对待,而不是整型数值。这是常识。
jason_zzw 2008-04-01
  • 打赏
  • 举报
回复
i.equals(42) 绝对是错的!
Integer类型的对像 用equal方法 判断应该加"" i.equeal("42") 这样才是正确的判断!!
(i.equals (d))
(d.equals (i)) 指向的地址不一样两个对象指向两个地址! 都是错的!

lizhi1026 2008-04-01
  • 打赏
  • 举报
回复
LZ要明白内存的分配问题。像这样类型的题目就可以很容易理解了。
老紫竹 2008-04-01
  • 打赏
  • 举报
回复
equals的一个前提,就是被比较的对象必须和他自身是相同的,比如
Double 则里面的必须是Double
Integer 则必须是 Integer.

所以 DE 都是 false, 而 42 默认是int,而且可以autobox为Integer,所以F为true
kaavie_fish 2008-04-01
  • 打赏
  • 举报
回复
i.equals(42)是对的哦! 如果以false and true来判断,D,E都是false但是程序不会报错!
i.equals(l)语法上没错!但是判断结果为false.
i.equals(d) and d.equals(i)没区别,一个是i与d比较,另个是d与i比较!
你可以这样去看

public static void main(String[] args) {
Integer i = new Integer(42);
Long l = new Long(42);
Double d = new Double(42.0);

if(i.equals(d)){
System.out.println("True");
}
else{
System.out.println("Flase");
}
}
steven20 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lastsweetop 的回复:]
答案是F吧 ABC编译都通不过 DE是false
[/Quote]
right
ABC的问题 看看类型转换就明白了
  • 打赏
  • 举报
回复
为什么我运行只有 F 是返回 true 的?

F 很明显就是一个对的。

而且 D E 貌似也不会是对的

看看 Integer#equals 的源代码:

public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}


比较的对象不是 Integer 类型时直接返回的是 false,根本不可能返回 true 的

同理 Double#equals 的源代码:

public boolean equals(Object obj) {
return (obj instanceof Double)
&& (doubleToLongBits(((Double)obj).value) == doubleToLongBits(value));
}


Double 的源码与 Integer 有点不同,基本上是类似的,不是 Double 类型是,也是返回的是 false
psyl 2008-04-01
  • 打赏
  • 举报
回复
。(i.equals (1))对么?? 这句话是对的,因为Long也有equals方法。 只是结果返回false而已。
吴冬冬 2008-04-01
  • 打赏
  • 举报
回复
答案是F吧 ABC编译都通不过 DE是false
steven20 2008-04-01
  • 打赏
  • 举报
回复
多看看API 那上写得很详细
steven20 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 psyl 的回复:]
我觉得i.equals(42) 是对的。 D,E都是错的。应该 long/double使用equals方法返回值肯定为false.
[/Quote]

恩 返回的都是false。
steven20 2008-04-01
  • 打赏
  • 举报
回复
Equals方法是用来判断对象里的内容是不是一致 返回值 true false
== 是判断是不是相同的对象
1。f为什么不对呢? 这要看题意了,这条语句本身没有问题,并且返回的值是true.
但是42是一个常量,而i是一个对象。这道题的意识是让你判断两个对象的比较值。
2。(i.equals (1))对么?? 这条语句没有问题 但是返回值是false
3。(i.equals (d))和 (d.equals (i)) 有什么区别??
我个人认为 没有太大的区别 只不过是比较的基准点不同(可参考,不一定正确。个人是这么理解的)。

psyl 2008-04-01
  • 打赏
  • 举报
回复
我觉得i.equals(42) 是对的。 D,E都是错的。应该 long/double使用equals方法返回值肯定为false.
AIC的学费很贵,半年18000元,大家看看他们教些什么内容吧他们学校的网址http://www.aicsws-sjtu.com/此内容是Java第1到第六章的PPT,希望大家喜欢如果大家觉得好我继续发课程定位“Java程序”课程覆盖SCJP认证所要求的知识点,是J2EE课程体系中的基础课程。本课程面向的学员应该具有基本的编程概念,能够编写简单的程序,并学习过操作系统,数据结构等计算机理论知识。课程选用最新的JDK5.0版本作为开发平台,教学的宗旨是:激发兴趣,理解知识,树立面向对象编程思维。  课程目标 认识Java平台,了解java application和applet的开发,激发学员对Java编程语言的兴趣。 学习和掌握Java变量,运算符,控制结构,数组,方法等基本语法。 培养和建立面向对象编程的思维方式,可以运用封装、继承和多态三大基本特性编写面向对象的程序。 理解和应用Java异常,常用类,IO,集合和多线程等开发技术。 课时安排 总学时:52学时 授课:48学时 (含约20学时实验) 考试:4学时 预备知识 了解和使用操作系统,计算机的基本组成,简单的程序开发技术 参考教材 “Java 程序设计教程” 第5 版 清华大学出版社 “SCJP学习指南” 人民邮电出版社 “Java 编程思想” 第3版 机械工业出版社 教学内容和要求知识点 重要程度 使用频度 难度Java 入门 高 中 易变量和运算符 高 高 中控制结构 高 高 易数组 高 高 中方法 很高 高 中封装 很高 很高 难继承 很高 很高 难多态 很高 高 很难内部类 高 中 难异常和断言 高 高 难常用类 高 很高 中基本数据结构 高 很高 难集合 很高 很高 难IO和串行化 高 中 难知识点 重要程度 使用频度 难度第1章 Java入门 4课时 了解Java程序开发环境,理解JVM的运作机制。 初步认识面向对象编程,Java视一切为对象。 使用输入和输出语句编写简单的Java应用程序。 区分applet与application(浏览器和虚拟机上运行)。 编写简单的applet,并嵌入HTML文档,掌握其运行方法。 掌握编程规范,如命名,缩进,空格,空行等。 使用javac, java, appletviewer等命令编译和运行application和applet。第2章 面向过程(变量和控制结构) 4课时 掌握变量的内存概念,8种基本类型,字面值和赋值。 正确使用各种Java运算符,如一元运算符,算术运算符,关系运算符,逻辑运算符,条件运算符和赋值运算符等。 辨别使用if,if…else,switch选择结构执行不同的动作。 辨别使用while,for,do…while循环结构执行不同的动作。 使用程序控制语句break和continue。 使用基本类型的包装器类,理解装箱和拆箱。 [*]了解Java内存机制:栈、堆、常量池等,理解垃圾回收机制。第3章 面向过程(数组和方法) 4课时 理解如何声明数组、构造数组、初始化数组以及使用数组中的各个元素。 清楚数组作为对象处理,创建数组对象时指定数组大小。 能够声明和操作多维数组。 掌握定义方法(声明方法)和调用方法,通过参数和返回值传递数据。 理解实际参数与形式参数以及参数类型的提升(隐式转型)。 掌握方法重载(overload)的基本要求。 区别和掌握按值传递与按引用传递。第4章 面向对象(封装) 4课时 理解类封装属性(数据成员)和行为(方法成员),区别类和对象。 能够定义类,创建类的对象(实例化类)和通过对象引用访问数据成员和方法成员;形成定义类和使用类的两种不同的思维方式。 理解构造函数的作用(分配对象空间),理解和定义重载的构造函数。 明白this引用的两种用法。 弄清对象类型与基本类型的区别。 掌握private, public访问控制符。 理解和使用关

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧