[英]Advantage of using bitwise shifting in constant 1 in java
在android源代碼中,有類似下面的內容。 在這種情況下是否有充分的理由使用按位移位? 只需輸入1會更簡單嗎?
public static final int POP_BACK_STACK_INCLUSIVE = 1<<0;
像下面這樣使用或上面那樣使用的缺點是什么?
public static final int POP_BACK_STACK_INCLUSIVE = 1;
這樣做不是為了提高性能,而是為了維護代碼。
編譯后,編譯器將評估常量表達式,並且此常量將存儲為1
但是將來,當應通過移位更改此常數時,維護者將在源代碼中僅將0
更改為另一個數字。
Shift運算符只是向維護人員表明,在將來的版本中,該常數可以使用shift運算。
兩種版本都沒有性能優勢。 在第一種情況下, 1<<0
表達式在編譯時求值,而Java和Dalvik字節碼實際上將只使用常量1
...。
真正的原因是要證明這是一個“位標志”值。 將表達式寫為1<<0
表示該標志已設置為零位。
請注意,這不會為開發人員提供在將來的某些版本中更改班次的選項。 POP_BACK_STACK_INCLUSIVE
是一個公共的編譯時常量,因此更改它可能會導致二進制兼容性問題。 具體來說,針對不同版本的Android編譯的代碼的常量值將有所不同。 這可能會使應用無法在不同的Android版本之間移植。 也就是說,對於不同的版本,您將需要不同版本的應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.