主题:【游戏】不看不知道,一看吓一跳!!! -- Highway
marketing的事我们不管. 第一题里的boxing/unboxing也许在某些情况下有用, 但这个功能实在是可有可无. 真正复杂的类操作符还是得由程序员来重载, 而象Integer这样的我宁可用基本数据类型.
第二题和Java Language Specification的13.4.8和14.20小节里的例子一样, 书中指出了误用final关键字会导致break compatibility with existing binaries. 既然人家都那么说了, 只好怪程序员读书不仔细了.
当然这样的设计是值得推敲的. 在实际中如果Words和PrintWords是由不同的程序员/公司开发的, 后者也许只能得到Words.class或是不知道前者修改了Words.java, 麻烦就来了. 这有点类似"DLL Hell".
C++里的const关键字就没有此问题. 下面a.cpp和b.cpp完全可以分开独立编译, 怎么修改a.cpp都没事. C也是一样, 用extern const char*不会使编译器做错误优化. 其实常量在C/C++里面都是用头文件定义, 我对Java不提供#define这样的directives很有意见.
h.h:
#include <stdio.h>
class Words {
public:
static const char* FIRST;
static const char* SECOND;
static const char* THIRD;
};
a.cpp
#include "h.h"
const char* Words::FIRST="the";
const char* Words::SECOND=NULL;
const char* Words::THIRD="set";
b.cpp
#include "h.h"
main()
{
printf("%s\n",Words::FIRST);
printf("%s\n",Words::SECOND);
printf("%s\n",Words::THIRD);
}
所以此题对Java和程序员各打五十大板.
第三题说明不光是java.exe而且javac.exe也是用int保存中间结果. 这太土了, 简直是个bug, 自动类型转换从来是就高不就低的.
P.S. 看了Highway的大作后发现C/C++也一样土, 真是没想到啊. 不知Fortran是否会好一些?
- 相关回复 上下关系8
😁看来好多东西要动手才行。 Highway 字24 2005-07-05 17:37:50
😉有些问题你可能不知道。第一题在以前一直都是错误的。但 Highway 字946 2005-07-04 22:49:20
😥发错了, 空贴 truth 字0 2005-07-05 15:30:11
呵呵, 我们是从程序员的角度来看问题的
😁谢谢参与。希望什么时候能看到阁下的原创大作!!! Highway 字0 2005-07-05 15:01:41
😜题目给的有问题阿 whoknows 字399 2005-07-01 20:08:49
😁你有所不知。在以前的Java中,<=,>=这些操作符只能用于原始数据类型 Highway 字139 2005-07-01 21:55:14
😁这个倒是,不过 whoknows 字467 2005-07-01 22:22:20