簡體   English   中英

在Java中使用常數1中的按位移位的優勢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM