该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-02
最后修改:2010-06-02
基本的正则表达式 是程序员必不可少的强大武器
String classPath = "java.lang.String"; System.out.println(classPath.replaceAll(".", "/")); System.out.println(classPath.replaceAll("[.]", "/")); |
|
返回顶楼 | |
发表时间:2010-06-02
不对, 那个Increment 的题理解错了, 求解
|
|
返回顶楼 | |
发表时间:2010-06-02
mathfox 写道 那本书都是类似的这种题,我记不清是java cookbook还是java puzzle什么名了。 你出的这些题,在这个论坛,每个题都有人单独发过贴。并且有很多讨论。 这些题不是我出的,是从朋友那拿过来的,我也做了一次,然后对每个题都深入理解分析了解了一下,感觉这些题还行吧,考的知识点比较多,大多涉及了一些java底层细节实现的知识,虽然得出答案不难,但还是能检测出一些问题来的,根据笔试者的答题情况,面试的时候针对这些问题深入下去还是能聊一会儿的,呵呵,个人观点。 刚搜索了下确实有本Java Puzzlers这本书,中文名为《java 解惑》有空找本来看看。 |
|
返回顶楼 | |
发表时间:2010-06-02
nickevin 写道 int j = 10; for (int i = 0; i < 100; i++) { j = j + j; } System.out.println(j); 改造一下 结果如何 为什么结果是还是0, 我追到32次的时候, 后面就全部是0了, 想知道答案 |
|
返回顶楼 | |
发表时间:2010-06-02
最后修改:2010-06-02
queal 写道 nickevin 写道 int j = 10; for (int i = 0; i < 100; i++) { j = j + j; } System.out.println(j); 改造一下 结果如何 为什么结果是还是0, 我追到32次的时候, 后面就全部是0了, 想知道答案 int j = 10; BigDecimal bg = new BigDecimal(10); for (int i = 0; i < 100; i++) { j = j + j; bg = bg.add(bg); } System.out.println(j); System.out.println(bg); inteter -32768 - 32767 2 带符号16位 结果是 12676506002282294014967032053760 integer越界了 |
|
返回顶楼 | |
发表时间:2010-06-02
nickevin 写道
queal 写道
nickevin 写道
int j = 10; for (int i = 0; i < 100; i++) { j = j + j; } System.out.println(j); 改造一下 结果如何 为什么结果是还是0, 我追到32次的时候, 后面就全部是0了, 想知道答案 int j = 10; BigDecimal bg = new BigDecimal(10); for (int i = 0; i < 100; i++) { j = j + j; bg = bg.add(bg); } System.out.println(j); System.out.println(bg); 越界了 public static void main(String[] args) { int j = 10; for (int i = 0; i < 100; i++) j = j + 1000000000; System.out.println(j); }
|
|
返回顶楼 | |
发表时间:2010-06-02
queal 写道
nickevin 写道
int j = 10; for (int i = 0; i < 100; i++) { j = j + j; } System.out.println(j); 改造一下 结果如何 为什么结果是还是0, 我追到32次的时候, 后面就全部是0了, 想知道答案
int minvalue = Integer.MIN_VALUE; int maxvalue = Integer.MAX_VALUE; System.out.println((maxvalue+1) == minvalue); //print true minvalue + minvalue = 0; 这就是最后打印结果为0 的原因,然后再去想想两个minvalue 相加结果为什么会是0,这个就涉及到16进制换算的规则了。
|
|
返回顶楼 | |
发表时间:2010-06-02
我知道了, 越界相加, 第32回加回0了, 诶, 又是一道阴险题啊
|
|
返回顶楼 | |
发表时间:2010-06-02
nickevin 写道
queal 写道
nickevin 写道
int j = 10; for (int i = 0; i < 100; i++) { j = j + j; } System.out.println(j); 改造一下 结果如何 为什么结果是还是0, 我追到32次的时候, 后面就全部是0了, 想知道答案 int j = 10; BigDecimal bg = new BigDecimal(10); for (int i = 0; i < 100; i++) { j = j + j; bg = bg.add(bg); } System.out.println(j); System.out.println(bg); 越 界了
public static void main(String[] args) { int j = 10; for (int i = 0; i < 100; i++) j = j + 1000000000; System.out.println(j); }
追踪i和j的变化值如下: j i 838860800 22
也就是说当i=28时,j为最小的int值,两个最小的int值相加就是0(可以换成二进制进行运算可得)
|
|
返回顶楼 | |
发表时间:2010-06-02
真的在考程序员对基础的理解,但是一不小心就会中了出题者的陷阱.要仔细看题.
|
|
返回顶楼 | |