2014-07-17 20 views
8

PMD, Boole örneğini önlemek için beni uyarıyor (verimlilik nedeniyle). BuBoolean örneğini kullanmak neden iyi bir fikirdir?

Boolean variable = new Boolean(somestringIGotRepresentingABoolean); 

böyle bir şey var ve neden daha iyi olduğunu bu

Boolean variable = Boolean.valueOf(somestringIGotRepresentingABoolean); 

kullanmak gerekiyor?

belgelerine

cevap

11

Bunun nedeni, yeni Boolean'ın her zaman yeni bir örnek döndürmesidir. Boolean örnekleri değişmez olduğundan, 2'den fazla örneğe sahip olmak mantıklı değildir. Biri yanlış, diğeri doğru.

bu deneyin ve değişmez (dize gibi) Java Boole

Boolean boolean1 = new Boolean("true"); 
Boolean boolean2 = new Boolean("true"); 
Boolean boolean3 = new Boolean("true"); 

System.out.println(System.identityHashCode(boolean1)); 
System.out.println(System.identityHashCode(boolean2)); 
System.out.println(System.identityHashCode(boolean3)); 

Boolean valueOf1 = Boolean.valueOf("true"); 
Boolean valueOf2 = Boolean.valueOf("true"); 

System.out.println(System.identityHashCode(valueOf1)); 
System.out.println(System.identityHashCode(valueOf2)); 
9

, okuyabilir:

new Boolean(boolean value) 

değer argümanı temsil eden bir Boolean nesnesi ayırır.

Not: Bu kurucuyu kullanmak nadiren uygundur. Yeni bir örnek gerekli olmadıkça, statik fabrika değeriOf (boole) genellikle daha iyi bir seçimdir. Daha iyi alan ve zaman performansı vermesi muhtemeldir.

4

göreceksiniz. Bu,

x kullanmanız durumunda, "x = false" den sonra, farklı bir nesneye işaret eder. Dolayısıyla, Boolean.valueOf() yöntemini kullanırsanız, Java en fazla iki Boolean nesnesinin, biri true'u ve diğeri de false'yi temsil eden iki tane nesne olmasına dikkat edecektir. .valueOf (true) kullanırsanız, true-object'e bir tanıtıcı döndürür ve .valueOf (false) kullanırsanız, false nesnesine bir tanıtıcı döndürür. Böylece gereksiz nesneler oluşturmazsınız ve böylece çöp toplayıcı tarafından silinmek zorunda kalmazlar.

"Yeni Boolean()" kullanırsanız, bu işe yaramaz ve Java her seferinde yeni bir Nesne oluşturacaktır. Böylece muhtemelen çok hızlı bir şekilde boşaltılacak ve çöp toplayıcı tarafından temizlenmesi gereken bir sürü gereksiz nesneye sahip olacaksınız. Böylece bu size daha fazla bellek (tüm nesneler için), tahsis için zaman (yeni Booleanlar yaratırken) ve tahliye için zaman (nesneler çöp toplayıcı tarafından yakalandığında) size hiçbir avantaj sağlamaz.

İlgili konular