锁定老帖子 主题:我也有两个无聊变态的java题目
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-16
String a = "a"; String b = "a"; a == b是否为true这种题目很反感,我本人也是。 但我这里也有两个无聊变态的题目 一、 在JDK 1.5以后的版本 Integer i = 100; Integer j = 100; Integer m = new Integer(100); Integer x = 200; Integer y = 200; 请问下面的比较结果是true还是false? 1: i == j 2: i == m 3: x == y 答案:2和3都是false,但是,1是true 二、 有下程序 import org.junit.Test; public class FooTest { @Test public void foo() throws Exception { System.out.println(Foo.x); System.out.println(Foo.y); } } class Foo { public static final int x = 1; public static int y = 2; static{ System.out.println("hello"); } } 1: 执行单元测试的foo方法会输出什么? 2: 如果把foo方法里的两句调用次序反过来,会输出什么? 答案 1时,输出: 1 hello 2 2时,输出: hello 2 1 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-03-16
第一题我知道,考SCJP时见过.好像是在一个数值范围内,对象分配的是一样的,仅限包装类.
|
|
返回顶楼 | |
发表时间:2008-03-16
这些问题很多是很无聊的。建立在写代码做实验基础上的考题是无意义的,因为你很可能是在测试undefined behavior。只有spec和javadoc里面明确说了的才作数,而不是某个jvm在你的某个测试里这样做了,它就必须永远这样做。
推荐读 《Java Puzzlers》,如果你觉得自己java很熟,读这个挑战一下自我吧。 |
|
返回顶楼 | |
发表时间:2008-03-16
ajoo 写道 这些问题很多是很无聊的。建立在写代码做实验基础上的考题是无意义的,因为你很可能是在测试undefined behavior。只有spec和javadoc里面明确说了的才作数,而不是某个jvm在你的某个测试里这样做了,它就必须永远这样做。
推荐读 《Java Puzzlers》,如果你觉得自己java很熟,读这个挑战一下自我吧。 读了下,确实非常BT 不过,说实话,也有不少用处 可以解决不少的BUG 但是这个要是真拿出来做面试 是有点无聊和变态 |
|
返回顶楼 | |
发表时间:2008-03-16
很无聊。
个人以为, 全面和及时的单元测试完全可以及时解决这些问题。 |
|
返回顶楼 | |
发表时间:2008-03-16
受教了,第二个题还知道怎么回事
第一个题就很疑惑了,太怪异了 |
|
返回顶楼 | |
发表时间:2008-03-16
foy 写道 受教了,但是第二个题还知道怎么回事
第一个题就很疑惑了,太怪异了 第一个题目是因为: 有些primitive值会被unbox成常量、不可变的wrapper对象,-127到127之间的值是不可变的wrapper类型,虚拟机对i和j使用了同样的对象实例及内存地址。 二是因为: static final的属性,编译器会解析成对常量的本地copy,该常量存在于引用者的常量池或者字节码流中,或者二者都有(参见深入java虚拟机),使用不会引起类的初始化 |
|
返回顶楼 | |
发表时间:2008-03-16
这种机制只是设计用来减少虚拟机内存占有量的,不是为了作为程序员可以使用的一种工具而设计的
实际写代码,没有人会这样去比较 就是不会比较两个String的地址一样 但是,面试却常考这种无聊的东西 可能觉得这样能考出对java的精通程度吧 |
|
返回顶楼 | |
发表时间:2008-03-16
ajoo 写道 这些问题很多是很无聊的。建立在写代码做实验基础上的考题是无意义的,因为你很可能是在测试undefined behavior。只有spec和javadoc里面明确说了的才作数,而不是某个jvm在你的某个测试里这样做了,它就必须永远这样做。
推荐读 《Java Puzzlers》,如果你觉得自己java很熟,读这个挑战一下自我吧。 呵呵,《Java 解惑》很多疑惑的问题都可以在其中找到。 |
|
返回顶楼 | |
发表时间:2008-03-17
好象是Integer里面有个做缓存的内部类
|
|
返回顶楼 | |