2013-01-11 36 views
13

Bir koşul ayarlamaya çalışıyorum ve aşağıdaki gibi true veya false ayarlamaya çalışıyorum ancak her zaman false değerini döndürür.Java Üçlü Operatör true veya false değerini ayarlamak için

boolean checked = (categoriesCursor.getString(3) == "1") ? true 
        : false; 

Log.i("Nomad",categoriesCursor.getString(3)+ " "+checked); 

Değerleri çıkarmaya çalıştığımda aşağıdakileri elde ediyorum. Eğer referanslar değil dizeleri karşılaştırarak çünkü

01-12 00:05:38.072: I/Nomad(23625): 1 false 
01-12 00:05:38.072: I/Nomad(23625): 1 false 
01-12 00:05:38.072: I/Nomad(23625): 1 false 
01-12 00:05:38.072: I/Nomad(23625): 1 false 
01-12 00:05:38.072: I/Nomad(23625): 1 false 
01-12 00:05:38.072: I/Nomad(23625): 0 false 
01-12 00:05:38.072: I/Nomad(23625): 0 false 
+7

Kodunuz hakkında bir yorum: Neden burada üçlü operatör kullanıyorsunuz? Boolean işaretli = "1" .equals (categoryCursor.getString (3)); ' –

+0

Burada tüm cevaplara bir yorum:' '1 '.equals (categoriesCursor.getString (3));' 'dır 'categoryCursor.getString (3) .equals ("1")' den daha düşüktür çünkü bir NullPointerException için daha az fırsat vardır. –

+0

@DanielKaplan vay.Böyle bir şey yapabildiğimi bilmiyordum: D –

cevap

38

O false her zaman döndürür. Muhtemelen bunun yerine geliyordu:, bunun yerine bunu daha güvenli olacaktır

boolean checked = categoriesCursor.getString(3).equals("1"); 

Ve durumunda categoriesCursor.getString(3) içinde

null olabilir:

boolean checked = (categoriesCursor.getString(3).equals("1")) ? true 
       : false; 

bu eşdeğer olur Hangi

boolean checked = "1".equals(categoriesCursor.getString(3)); 
+0

Son ifade ne yapar? –

+3

@HarshaMV: İmleçten aldığınız _string_ için "1" '_equal_ olup olmadığını kontrol eder. –

+2

@HarshaMV: Java'nın dize sabitleri vardır ve String nesneleri olarak davranırlar; "String" sınıfında kullanılabilen tüm yöntemler de "String" sabitleri için kullanılabilir. – fge

3

==

yerine equals kullanın.

categoriesCursor.getString(3).equals("1") 

İkincisi, burada üçlü operatörü gerekmez:

boolean checked = (categoriesCursor.getString(3).equals("1")); 
1

Kullanım categoriesCursor.getString(3).equals("1") yerine ==

1

Birincisi, dizeleri karşılaştırmak, sen equals yöntemi kullanmak gerekecek. equals zaten sadece atamak, bir mantıksal sonuçlanır: Buna

boolean checked = categoriesCursor.getString(3).equals("1"); 
1

Değişim it:

boolean checked = (categoriesCursor.getString(3).equals("1")) ? true : false; 

dize içeriğini karşılaştırmak için == kullanmayın.

NOT: == operatörü aşırı yüklenemez veya JAVA'da değiştirilemez. object1 == object2, object1 ve object2'un Dizeleri veya başka bir nesne kullanıyorsanız, başvuruların aynı temel nesneyi gösterip göstermediğini kontrol edersiniz. Bu, içeriği karşılaştırmayacaktır. Bu

(categoriesCursor.getString(3).equals("1")) ? true : false; 
3

deneyin. Sonra == yerine equals() kullanmanız gerekir. == işleci, nesnelerdeki başvuruların eşit olup olmadığını kontrol eder.

1

İlk üçlü operatör için gerek yoktur kullanarak

1

EqualsIgnoreCase() yöntemini de kullanabilirsiniz.

İlgili konular