1. Boole işlemleri
|
ve işleçleri &
yalnızca sayılara değil aynı zamanda mantıksal ifadelere de uygulanabilir.
&&
Ancak, zaten bildiğiniz gibi, ve operatörleri var ||
. |
Neden yerine ||
ve &
yerine kullanırız &&
? Bunun bir anlamı var mı? Görünüşe göre var. Bazen.
ve mantıksal işleçler , tembel bir ilke izlenerek soldan sağa doğru yürütülür ||
.&&
(expression1) || (expression2) || (expression3)
Eğer expression1
eşit ise true
, değerlendirmenin bir anlamı yoktur expression2
ve expression3
: sonuç true
ne olursa olsun olacaktır.
Buna göre ifadeleri değerlendirirken (soldan sağa doğru değerlendirilirler) alır almaz true
geri kalan ifadelerin değerlendirilmesi atlanır . Ve eğer expression2
ve expression3
metod çağrılarını içeriyorsa, bu metotlar çağrılmayacaktır !
Aynı &&
mantıksal operatör için de geçerli:
(expression1) && (expression2) && (expression3)
Eğer expression1
eşit ise false
, değerlendirmenin bir anlamı yoktur expression2
ve expression3
: sonuç false
ne olursa olsun olacaktır.
Bu, aşağıdaki gibi şeyler yazmanıza izin veren önemli bir gerçektir:
String s = null;
if (s != null && s.length() > 0) {
Yukarıdaki örnek size asla bir NullPointerException sağlamaz , çünkü yalnızca ilk kısım ise s.length()
yürütülür .s! = null
true
s
eşittir ise , operatörün null
solundaki kısım , o zaman tüm boole ifadesinin sonucu , yani sağdaki kısım ( ) değerlendirilmez.&&
false
false
s.length() > 0
|
İşleci veya işleci kullanırsanız &
, tembel değerlendirme yoktur : her alt ifade her zaman değerlendirilir.
2. Java'da işlem önceliği
Muhtemelen lise matematik dersinizden hatırladığınız gibi, çarpma işleci toplama işlecinden daha yüksek önceliğe sahiptir. Parantezler daha da yüksek bir önceliğe sahiptir: önce parantez içindeki ifadeler, ardından çarpma ve bölme ve ardından toplama ve çıkarma değerlendirilir.
Java'daki operatörlerin de bir öncelik sırası vardır. Aradaki fark, a) bunlardan biraz daha fazla olması, b) bazı operatörler için işlenenlerin soldan sağa, diğerleri için ise sağdan sola doğru değerlendirilmesidir.
İşte tüm Java işleçlerini içeren bir tablo:
Kategori | Şebeke | çağrışımsal |
---|---|---|
Sonek | () [] . |
Soldan sağa |
tekli | ++ -- ! ~ |
Sağdan sola |
Çarpımsal | * / % |
Soldan sağa |
Katkı | + - |
Soldan sağa |
vites değiştirme | >> >>> << |
Soldan sağa |
ilişkisel | > >= < <= |
Soldan sağa |
eşitlik | == != |
Soldan sağa |
bit düzeyindeAND |
& |
Soldan sağa |
Exclusive OR (XOR) |
^ |
Soldan sağa |
bit düzeyindeOR |
| |
Soldan sağa |
MantıklıAND |
&& |
Soldan sağa |
MantıklıOR |
|| |
Soldan sağa |
koşullu | ?: |
Sağdan sola |
Atama | = += -= *= /= %= >>= <<= &= ^= |= |
Sağdan sola |
Virgül | , |
Soldan sağa |
Üst satır, en yüksek önceliğe sahip operatörleri içerir. Parantezler, ()
önceliği açıkça ayarlamak için kullanılır. Bir dizi değişkeninin belirli bir dizinindeki bir öğeye erişmek için köşeli parantezler []
kullanılır. Nokta işleci ( .
), bir nesneye veya sınıfa başvuru kullanarak alan ve yöntemlere erişmek için kullanılır.
Operatörler tabloda ne kadar düşükse, öncelikleri o kadar düşük olur.
Bir ifadede birden çok işleç kullanıyorsanız tembel olmayın: parantez ekleyin.
Java'da şöyle bir şey yazabilirsiniz if (a & 1<< b > ~c)
ama yazmamalısınız. Yalnızca derleyici için değil, diğer programcılar için de kod yazıyorsunuz. Kod ne kadar okunabilir olursa o kadar iyidir.
3. Önek ve sonek artışı
Bildiğiniz gibi, Java'nın bir artırma operatörü ( ++
) ve bir eksiltme operatörü ( --
) vardır. Sırasıyla, bir değişkenin değerini artırır ve azaltırlar 1
.
Muhtemelen bilmediğiniz şey, bu işleçlerin iki türü olduğudur: önek (işleç değişkenden önce gelir) ve sonek (işleç değişkenden sonra gelir). Ve iki tür operatör biraz farklı çalışır.
Java'da şöyle bir ifade yazabilirsiniz:
int a = 5;
int b = a++;
Operatör ++
bir değişkenden sonra görünüyorsa ve değişken bir ifadenin parçasıysa (yukarıdaki örnekte olduğu gibi), o zaman ifade değişkenin geçerli değerini kullanır ve ancak bundan sonra değişken artırılır 1
.
Başka bir deyişle, şöyle bir şey olacak:
int a = 5;
int b = a;
a = a + 1;
Yani ilk bakışta düşündüğünüz gibi olmayacak b
.5
6
Operatör ++
değişkenden önceyse ve değişken bir ifadenin parçasıysa, önce artırılacak 1
ve ancak daha sonra değeri ifadede kullanılacaktır.
int a = 5;
int b = ++a;
Yukarıdaki örnek, aşağıdaki örneğe eşdeğerdir:
int a = 5;
a = a + 1;
int b = a;
Burada, b
eşit olacaktır 6
.
Java programcıları tarafından başka birinin de Java programcısı olup olmadığını belirlemek için kullanılan bir örnek bile var:
int a = 5;
int b = ++a + ++a;
Evet, onu da yazabilirsin.
Bu örnek gayet iyi derlenecek ve şöyle bir şeye dönüşecek:
int a = 5;
a = a + 1;
int v1 = a;
a = a + 1;
int v2 = a;
int b = v1 + v2;
Operatör için --
her şey tamamen aynı.
GO TO FULL VERSION