论坛首页 招聘求职论坛

我也有两个无聊变态的java题目

浏览 14150 次
精华帖 (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    
   发表时间:2008-03-16  
第一题我知道,考SCJP时见过.好像是在一个数值范围内,对象分配的是一样的,仅限包装类.
0 请登录后投票
   发表时间:2008-03-16  
这些问题很多是很无聊的。建立在写代码做实验基础上的考题是无意义的,因为你很可能是在测试undefined behavior。只有spec和javadoc里面明确说了的才作数,而不是某个jvm在你的某个测试里这样做了,它就必须永远这样做。

推荐读 《Java Puzzlers》,如果你觉得自己java很熟,读这个挑战一下自我吧。
0 请登录后投票
   发表时间:2008-03-16  
ajoo 写道
这些问题很多是很无聊的。建立在写代码做实验基础上的考题是无意义的,因为你很可能是在测试undefined behavior。只有spec和javadoc里面明确说了的才作数,而不是某个jvm在你的某个测试里这样做了,它就必须永远这样做。

推荐读 《Java Puzzlers》,如果你觉得自己java很熟,读这个挑战一下自我吧。


读了下,确实非常BT
不过,说实话,也有不少用处
可以解决不少的BUG
但是这个要是真拿出来做面试
是有点无聊和变态
0 请登录后投票
   发表时间:2008-03-16  
很无聊。

个人以为, 全面和及时的单元测试完全可以及时解决这些问题。
0 请登录后投票
   发表时间:2008-03-16  
受教了,第二个题还知道怎么回事
第一个题就很疑惑了,太怪异了
0 请登录后投票
   发表时间:2008-03-16  
foy 写道
受教了,但是第二个题还知道怎么回事
第一个题就很疑惑了,太怪异了


第一个题目是因为:
有些primitive值会被unbox成常量、不可变的wrapper对象,-127到127之间的值是不可变的wrapper类型,虚拟机对i和j使用了同样的对象实例及内存地址。

二是因为:
static final的属性,编译器会解析成对常量的本地copy,该常量存在于引用者的常量池或者字节码流中,或者二者都有(参见深入java虚拟机),使用不会引起类的初始化
1 请登录后投票
   发表时间:2008-03-16  
这种机制只是设计用来减少虚拟机内存占有量的,不是为了作为程序员可以使用的一种工具而设计的

实际写代码,没有人会这样去比较
就是不会比较两个String的地址一样

但是,面试却常考这种无聊的东西

可能觉得这样能考出对java的精通程度吧
0 请登录后投票
   发表时间:2008-03-16  
ajoo 写道
这些问题很多是很无聊的。建立在写代码做实验基础上的考题是无意义的,因为你很可能是在测试undefined behavior。只有spec和javadoc里面明确说了的才作数,而不是某个jvm在你的某个测试里这样做了,它就必须永远这样做。

推荐读 《Java Puzzlers》,如果你觉得自己java很熟,读这个挑战一下自我吧。


呵呵,《Java 解惑》很多疑惑的问题都可以在其中找到。
0 请登录后投票
   发表时间:2008-03-17  
好象是Integer里面有个做缓存的内部类
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics