2009-02-02 29 views

回答

14

沒有,沒有。

Java「的最後的」不是C++「常量」完全等效。下面(最終的變數延遲初始化)的作品在Java中:

final double x; 
int w = 1; 
if (w > 2) 
{ 
    x = 0.5; 
} 
else 
{ 
    x = - 0.5; 
} 

,但它並沒有在C++與「最終」改爲「常量」工作。

在方法聲明一個變量使用「最後」可以在Java中非常有用,因爲可以讓你用你的方法內創建的任何匿名類內部的變量。

PS。我首先對Java中缺乏「const」感到失望,但後來學會了與「final」一起生活。

PS2。鏈接到此線程中的Java詞彙表(http://mindprod.com/jgloss/immutable.html)有一件事是錯誤的:不,您沒有得到100%保證最終變量不會更改其值:

1)它從「未定義」更改爲「規定」,但編譯器會告訴你,如果你在Linux上初始化

2)之前引用它,雙有80位精度存儲在寄存器時,但存儲在內存中,當64位。當一個最終的雙變量被推出註冊表時,它將被截斷並改變它的值。正如Joel Spolsky所說,「抽象引發了泄漏」。

1

在Java中實現這一看到這個: Immutable objects in Java

+0

這是我見過的最差的網站..:/ – 2009-02-02 07:47:54

+0

添加了一個新鏈接.. – Naveen 2009-02-02 08:27:40

0

最接近的Java等價物constfinal

void func(final SomeClass x) { 
    // The following causes a compiler error 
    x = ...; 

    // The following works. If you don't want it to, then you have to make 
    // somevar final or write a getter (but not a setter) for it in SomeClass. 
    x.somevar = ...; 
} 
8

Java沒有任何東西像C++的const的概念。這是爭論的一個觀點,儘管有趣的是.NET沒有。我認爲,其原因有:

  • 獲得理解語法變得相當棘手(IMO) - 告訴可變StringBuilders的常量列表和const StringBuilders等的可變列表之間的差異是困難的。 (我當然覺得很難在C++中,儘管這可能是由於缺乏實踐的。)
  • 我強烈懷疑,這是不能接受的,允許常量性在託管語言被拋棄。它會違背整個事物的粒度。在很多情況下,這可能會讓他們更難處理。
  • 在執行時傳播關於const的信息(以避免被拋棄的可能性)在性能方面可能很困難和/或昂貴
  • 由於Java(和.NET)在過去並沒有常量,在遊戲的最後階段引入很難困難 - 除非所有常見的圖書館都支持它(並且在每一步都得到它正確的!),最終會出現一個令人討厭的混雜現象,事實上,如果您需要,它可能完全不可行使用兩個庫,其中一個不知道const,另一個只提供const值。
1

如上所述,在Java中沒有const。但是,當我們要實現「關閉」,同樣的結果在Java中,我們使用

public static final Object x = somedata; 

這在該點設置數據和霸菱抽象泄漏等等,你必須儘可能接近等價,你可以得到。

5

BTW:Java確實有const作爲關鍵字,但不能在任何地方使用它。