[英]Are short-circuit operators overloaded?
使用按位運算符有兩種情況:
對於布爾
boolean a = true;
boolean b= false;
boolean c = a|b; // Giving response after logical OR for booleans.
對於整數
int a = 10;
int b = 20;
int c = a|b; // Giving response after bitwise OR for boolean equivalents of "a" and "b".
以上兩種情況均符合http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.22.2的要求 。
是運營商| 超載?
我只是想問一個非常簡單的問題:“ |” 重載還是對布爾值(當然是二進制等效項)和整數執行按位或的相同任務?
我不確定您要問的是什么,但是至少在boolean c = a|b
和boolean c = a||b
之間字節碼是不同的:
boolean a = true;
boolean b = false;
boolean c = a|b;
ILOAD 1
ILOAD 2
IOR
ISTORE 3
boolean c = a||b;
ILOAD 1
IFNE L4
ILOAD 2
IFNE L4
ICONST_0
因此,這兩個運算符有效地導致了字節碼級別上的不同操作。 最具體地說, ||
僅當第一個操作數為false
時才計算第二個操作數|
在任何情況下都評估兩個操作數:
public boolean a() {
System.out.println(" a");
return true;
}
public boolean b() {
System.out.println(" b");
return false;
}
public void c() {
System.out.println("a() | b()");
boolean r1 = a() | b();
System.out.println("\na() || b()");
boolean r2 = a() || b();
}
輸出:
a() | b()
a
b
a() || b()
a
同時,用於整數位或的字節碼與用於布爾位或的字節碼相同:
int a1 = 10;
int a2 = 20;
int c1 = a1 | a2;
ILOAD 4
ILOAD 5
IOR
ISTORE 6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.