我想了很久,总觉得Java1.5等版本,这样做不当。

guishuanglin 2008-11-19 12:20:56
关于java处理基本对象类型的问题:

Long a = 2l;
Long b = 2l;
//结果为ture
System.out.println(a == b);
Long c = 128l;
Long d = 128l;
//结果为false
System.out.println(c == d);
//我觉得这里很容易让人产生错误,如果不去看源代码,还真不知道原因。
//始终觉得,前者应当返回假才好些
//实际上-128->127在java里定义了静态数据,所以这个值之内用自动封箱的给值方法,总是相等。

不知道大家对java这样做,有没有什么其它看法。
...全文
392 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuyueyue 2008-12-08
  • 打赏
  • 举报
回复
学习
guishuanglin 2008-12-06
  • 打赏
  • 举报
回复
是的,我在项目中使用时,很多新手出错,导致难找错误。
ZiSheng 2008-12-06
  • 打赏
  • 举报
回复
说实在,java这样没有多大意义,让人感觉混乱。
效率本身就不是他的长向,应该专注于自己的优势。网络,呵呵,个人认为。
guishuanglin 2008-12-05
  • 打赏
  • 举报
回复
1.4你只能new 这样肯定是false ,如果说1。5这样写就是 true
再见品月 2008-12-05
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 guishuanglin 的回复:]
引用 30 楼 liang8305 的回复:
Long a = 2l;
Long b = 2l;
//结果为ture
System.out.println(a == b);


只是因为你RP好......呵呵,在我这里就是false


在1.5,1.6里肯定是true;你用的什么版本咯。
[/Quote]
嘻嘻。。。
Long a = 2l;
Long b = 2l;
你在1.4里给俺写一个这样的。。不认的。。。
zidane1983 2008-12-05
  • 打赏
  • 举报
回复
顶ZangXT大侠。
guishuanglin 2008-12-05
  • 打赏
  • 举报
回复
而且我想在这次技术大会,有人会提出java其它核心错误设计,我提的问题可能是冰山一角,可能java有更严重,更深的设计问题。
guishuanglin 2008-12-04
  • 打赏
  • 举报
回复
有测试版
zhengpeiyong 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 guishuanglin 的回复:]
虽然jdk1.5,1.6,1.7搞了很多新东西,个人觉得,没什么新义。
真正在体系结构上改动太少了,而且象这样问题,在其它类型里也是一样的 Integer等。

用了这么多年java ,感到它,革新得太少了,不知道什么时候可以重定义体系,使之更强大。

一些做游戏领域比较重要的东西都没有,
运算符重载也没有。。。。。唉。
[/Quote]
现在有1.7了吗?
guishuanglin 2008-12-04
  • 打赏
  • 举报
回复
看源代码证明是:缓存了了。
但是引发出一些问题。
berlou 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 guishuanglin 的回复:]
引用 30 楼 liang8305 的回复:
Long a = 2l;
Long b = 2l;
//结果为ture
System.out.println(a == b);


只是因为你RP好......呵呵,在我这里就是false


在1.5,1.6里肯定是true;你用的什么版本咯。
[/Quote]

这个以来具体的JDK实现吧?Sun的标准实现确实是缓存了-128-127的吧?
IBM的实现不知道是什么样的。
guishuanglin 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 liang8305 的回复:]
Long a = 2l;
Long b = 2l;
//结果为ture
System.out.println(a == b);


只是因为你RP好......呵呵,在我这里就是false
[/Quote]

在1.5,1.6里肯定是true;你用的什么版本咯。
kbyst 2008-12-02
  • 打赏
  • 举报
回复
equals

public boolean equals(Object obj)

将此对象与指定对象进行比较。当且仅当该参数不是 null,且 Long 对象与此对象包含相同的 long 值时,结果才为 true。

覆盖:
类 Object 中的 equals

参数:
obj - 要与之进行比较的对象。
返回:
如果对象相同,则返回 true;否则,返回 false。
另请参见:
Object.hashCode(), Hashtable
liang8305 2008-12-02
  • 打赏
  • 举报
回复
Long a = 2l;
Long b = 2l;
//结果为ture
System.out.println(a == b);


只是因为你RP好......呵呵,在我这里就是false
xiaozhuaizhuai 2008-12-02
  • 打赏
  • 举报
回复
~~
guishuanglin 2008-11-21
  • 打赏
  • 举报
回复
由于cache对性能提高,与内存节省有很大的好处,我已经开始在项目中内置了字符收集器,象输入法一样
我已经把 GBK字符集初始到内存里面,大概占不到 1M内存。
并且在项目中做了约定,创建对象时都从这个cache里取静态字符。

guishuanglin 2008-11-21
  • 打赏
  • 举报
回复
楼上这里不是谈你说的问题 equals()与==的区别,这是学java的人首先要知道的。
跑题了。hehe
ZiSheng 2008-11-20
  • 打赏
  • 举报
回复
以空间换取时间
guishuanglin 2008-11-20
  • 打赏
  • 举报
回复
没具体计算过放在 char[]在占多少内存。
就算 10万个,也最多只需要 20W字节,大概0.2M内存空间,
我觉得这样是不是更有利于java在速度时间方面比较快。
guishuanglin 2008-11-20
  • 打赏
  • 举报
回复
所有,是指字符集:如 utf-16le (java用的字符集)
全部常量化,这样创建对象时就只需引用。
不就速度更快?
加载更多回复(23)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧