作者ronmi (Love.みけ)
站内java
标题Re: [问题] 关於 | 与 || 和 & 与 && 的差别 ??
时间Tue Jul 29 20:16:14 2008
※ 引述《takashi737 (小兔)》之铭言:
: ※ 引述《yhn0tgb60 (呦厚厚)》之铭言:
: : 如题
: : 也就是逻辑运算子跟位元运算子的差别
: : 好像用法上都一样是吗???
: : 谢谢了
: | 和 & 是逻辑运算元; || 和 && 是 前者的short-circuit
: ex:
: int a = 1, b =2;
: (b > a) | (a < 0) --> true | false --> return true
: 此运算会先运算(a < b),不论传回 true 或 false 皆会执行下一组(a < 0)
: ---------------------------------------------------------------------
: (b > a) || (a < 0)
: 也是会先运算(b > a),若传回 true, 则不会执行下一组(a < 0)
: (b < a) || (a < 0)
: 会先运算(b < a), 若传回 false,则会执行下一组(a < 0)
: 参考猛虎考试书
刚刚做了点小实验,结果无法判断,只好再去找官网
实验很简单
int i1=(0|1);
int i2=(true|false);
int i3=(1|false);
boolean b1=(0|1);
boolean b2=(true|false);
boolean b3=(1|false);
编译的结果是i2和b1需要强制转型、i3和b3则出现
operator | cannot be applied to int,boolean
的结果
官网的说明则有清楚的定义
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html
The bitwise & operator performs a bitwise AND operation.
The bitwise ^ operator performs a bitwise exclusive OR operation.
The bitwise | operator performs a bitwise inclusive OR operation.
而在 Equality, Relational, and Conditional Operatorsperation 页面上
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op2.htmltwise
则完全没有提到&、|这两个operator
当然官网说明不见得100%正确
不过这倒是让我很好奇倒底书上的正确还是官网的正确了
以实验结果而言,应是对|做了overloading(如同+一样)
一开始我觉得书上所说的应该不正确,毕竟一个operator有两种不太相同的意思,
感觉好像怪怪的,但回心一想+,也就释然了
至於事实如何,我想到的验证方式是将无最佳化的bytecode反组译,看是怎麽做的
反组译苦手,也许哪位大大有空可以代为解惑一下?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.217.238
1F:推 H45:看不出有什麽问题?能解释一下哪边怪怪的吗? 07/29 20:25
2F:推 qrtt1:& 不等同於 &&, | 不等同於 || 07/29 20:30
3F:推 locationc:.......... 07/29 20:49
4F:推 godfat:何苦拿 bitwise operator 操作 boolean 呢...? 07/29 20:50
5F:推 willieliao:bit flag很好用.. 07/29 22:24