在最底層,Java中的數據是通過使用操作符來操作的。
Java是建立在C++基礎之上的,所以C和C++程序員應該非常熟悉Java的大多數操作符。當然,Java也做瞭一些改進與簡化。
3.2 使用Java操作符
操作符接受一個或者多個參數,並生成一個新值。幾乎所有的操作符都隻能操作“基本類型”。例外的操作符是“=”,”==”,!=”,這寫操作符能操作所有的對象。除此之外,String類支持“+”,”+=”。
3.3 優先級
當一個i阿表達式中存在多個操作符時,操作符的優先級就決定瞭各部分的計算順序。最簡單的規則就是先乘除後加減。程序員經常會忘記某些優先規則,所以應該用括號明確規定計算順序。
Java代碼
//: Precedence.java
public class Precedenece {
public static void main(String[] args) {
int x = 1 , y = 2 , z = 3;
int a = x + y – 2 / 2 + z;
int b = x + ( y – 2 ) / ( 2 + z );
System.out.println("a = "+a+"\tb = "+b);
}
}
/* Output:
* a = 5 b = 1
*///:~
3.4 賦值
賦值使用操作符“=”。它的意思是取”右值“把它復制給”左值“。
”右值“可以是任何常數,變量或者表達式。
“左值”必須是一個明確的已命名的變量。
對基本數據類型的賦值是很簡單的。基本類型存儲瞭實際的數值,而並非指向一個對象的引用,所以在為其賦值的時候,是直接將一個地方的內容復制到另一個地方。
但是在為對象“賦值”的時候,情況卻發生瞭變化。“將一個對象賦值給另一個對象”,實際上是將“引用”從一個地方復制到另一個地方。這意味著假若對象使用 c=d 那麼c和d都指向原本隻有d指向的對象。
Java代碼
//: Assignment.java
// Assignment with objects is a bit tricky
class Tank {
int level;
}
public class Assignment {
public static void main(String[] args) {
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.level = 9;
t2.level = 48;
System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
t1 = t2;
System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
t1.level = 27;
System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
}
}
/* Output:
* t1.level:9 t2.level:48
* t1.level:48 t2.level:48
* t1.level:27 t2.level:27
*///:~
這種特殊的現象通常稱作“別名現象”,是Java操作對象的一種基本方式。直接操作對象內的域可以保持連個對象彼此獨立,但是容易導致混亂。並且,違背瞭良好的面向對象車徐設計的原則。
3.4.1 方法調用中的別名問題
Java代碼
//: PassObject.java
// Passing objects to methods may not be what you're used to .
class Letter {
char c;
}
public class PassObject {
static void f (Letter y) {
y.c = 'z';
}
public static void main(String[] args) {
Letter x = new Letter();
x.c = 'a';
System.out.println("1.\tx.c: "+x.c);
f(x);
System.out.println("2.\tx.c: "+x.c);
}
}
/* Output;
* 1. x.c: a
* 2. x.c: z
*///:~
在許多編程語言中,方法參數將復制一份其傳入參數的副本;但Java實際上隻是傳遞瞭一個引用針對對象的操作都是引用。
3.5 算術操作符
Java的算術操作符與其他大多數程序設計語言都是相同的。同時其也使用一種來自C和C++的簡化符號同時進行運算與賦值操作(x+=4)。
一元減號用於轉變數據的符號,而一元加號隻是為瞭與一元減號相對應,但是它唯一的作用僅僅是將較小類型的操作數提升為 int。
3.6 自動遞增和遞減
遞增(++)和遞減(–)運算是兩中相當不錯的快捷運算。這連個操作符各有兩種使用方式,通常稱為“前綴式”和“後綴式”。“前綴式“會先執行運算,再生成值;”後綴式“會先生成值,再執行運算。
Java代碼
//: AutoInc.java
// Demostrates the ++ and — operators.
public class AutoInc {
public static void main(String[] args) {
int i = 1;
System.out.println("i : "+i);
System.out.println("++i : "+(++i));
System.out.println("i : "+i);
System.out.println("i++ : "+(i++));
System.out.println("i : "+i);
System.out.println("–i : "+(–i));
System.out.println("i : "+i);
System.out.println("i– : "+(i–));
System.out.println("i : "+i);
}
}
/* Output:
* i :1
* ++i :2
* i :2
* i++ :2
* i :3
* –i :2
* i :2
* i– :2
* i :1
*///:~
作者“RoyAkon's FreeStyle”