| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 717 人关注过本帖, 2 人收藏
标题:【原创】【推荐阅读: 9 个太阳才能照到的地方】Java 解惑:陷阱、缺陷、犄 ...
只看楼主 加入收藏
日知己所无
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:38
帖 子:427
专家分:2071
注 册:2014-3-22
结帖率:92.86%
收藏(2)
已结贴  问题点数:100 回复次数:3 
【原创】【推荐阅读: 9 个太阳才能照到的地方】Java 解惑:陷阱、缺陷、犄角旮旯案例
Java Puzzles是Effective Java作者Joshua J. Bloch写的一本关于Java语言中的一些“陷阱”相关的书
本文是基于对网友回答的内容进行整理的结果,属于原创,转载时请注明出处,谢谢

Java 解惑:陷阱、缺陷、犄角旮旯案例【旮旯:9个太阳才能照到的地方】
Java™ Puzzlers: Traps, Pitfalls, and Corner Cases
豆瓣书评【http://book.

C陷阱与缺陷
C Traps and Pitfalls
豆瓣书评【http://book.

这样的书是告诫程序员【不该做什么的书】,
在看完告诉程序员【应该做什么】的《Java核心技术》或者《Java编程思想》之后,
正式书写代码之前,
值得认真阅读

没读这本书之前____,读了这本书之后____。
我最喜欢这样的书评了……

我自己的真实感觉:
没读这本书之前,觉得自己Java没啥不会的了,
读了这本书之后,觉得后背都是冷汗……

下面是具体的一个例子:

对于下面的描述,大家应该都比较熟悉了……
在Java语言里:
1)对于对象来讲(String,Integer等大写字母开头的类型所定义的对象),除了去判断是否为空(null)可以使用==以及!=以外,尽可能的使用equals来判断值是否相等
2)基本数据类型(char,int等小写字母开头的类型)可以使用==和!=进行安全的判断

但是,关于下面程序的输出,可能就有点儿耐人寻味了……
程序代码:
public class Example {
    public static void main(String[] args) {
        // 错误、危险的书写方法
        Integer a100 = 100;
        Integer b100 = 100;
        System.out.println("a100 == b100:" + (a100 == b100));
        Integer a155 = 155;
        Integer b155 = 155;
        System.out.println("a155 == b155:" + (a155 == b155));

        System.out.println("new Integer(0) == new Integer(0):"
                + (new Integer(0) == new Integer(0)));

        Integer i = new Integer(0);
        Integer j = new Integer(0);
        if (i <= j && j <= i && i != j) {
            System.out.println("不可思议的走到了这里");
        } else {
            System.out.println("不可思议的居然没走到这里");
        }

        // 正确、安全的书写方法
        System.out.println("a100.equals(b100):" + (a100.equals(b100)));
        System.out.println("a155.equals(b155):" + (a155.equals(b155)));
        System.out.println("new Integer(0).equals(new Integer(0)):"
                + (new Integer(0).equals(new Integer(0))));
    }
}


输出:【用Ctrl+A查看】
a100 == b100:true
a155 == b155:false
new Integer(0) == new Integer(0):false
不可思议的走到了这里
a100.equals(b100):true
a155.equals(b155):true
new Integer(0).equals(new Integer(0)):true


其中【不可思议的走到了这里】和【什么东西又黑又白又红】一样,
颠覆了大多数程序员的常识……

而【new Integer(0) == new Integer(0):false】
又打破了【-127-128 之间的每个值都建立了一个对应的Integer 对象】的神话……

这次的谜题可以参考《Java 解惑》的【Puzzle 32: Curse of Looper】
搜索更多相关主题的帖子: 程序员 做什么 Java 旮旯 
2014-10-05 15:00
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:34 
已收藏

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2014-10-06 20:59
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:34 
收藏中...已收藏!

三十年河东,三十年河西,莫欺少年穷!
2014-10-07 15:53
雨后邂逅
Rank: 2
等 级:论坛游民
威 望:1
帖 子:5
专家分:90
注 册:2014-8-12
收藏
得分:34 
有时间拜读拜读
2014-10-08 13:45
快速回复:【原创】【推荐阅读: 9 个太阳才能照到的地方】Java 解惑:陷阱、缺陷 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015888 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved