1、創建對象後如果希望成員變量不被其中任何一個對象改變,可以使用static關鍵字。
實例代碼如下:
public class AccessProperty {
static int i = 47;
public void Call(){
System.out.println("調用Call方法");
for(i = 0; i < 3; i++){
System.out.print(i + " ");
if(i == 2){
System.out.println("\n");
}
}
}
public AccessProperty(){
}
public static void main(String[] args) {
AccessProperty t1 = new AccessProperty();
AccessProperty t2 = new AccessProperty();
t2.i = 60;
System.out.println("第一個實例對象調用變量i的結果:" + t1.i);
t1.Call();
System.out.println("第二個實例對象調用變量i的結果:" + t2.i);
t2.Call();
}
}
輸出結果如下:
第一個實例對象調用變量i的結果:60
調用Call方法
0 1 2
第二個實例對象調用變量i的結果:3
調用Call方法
0 1 2
從上述運行結果可以看到,由於使用了t2.i = 60語句改變了靜態成員變量的值,使用對象t1調用成員變量的值也爲60,這正是i值被定義爲靜態成員變量的結果,即使使用兩個對象對同一個靜態成員變量進行操作,依然可以改變靜態成員變量的值,因爲在內存中兩個對象同時指向同一塊內存區域。
2、對象的引用
引用指示存放一個對象的內存地址,並非存放一個對象,嚴格地說引用和對象是不同的,但是可以將這種區別忽略,如可以簡單的說book是Book類的一個對象,而事實上應該是book包含Book對象的一個引用
3、對象的比較
在Java語言中有兩種對象的比較方式,分別是“==”運算符和equals()方法。其區別是:equals()方法是String類中的方法,它用於比較兩個對象引用所指的內容是否相等;而“==”運算符比較的是兩個對象引用的地址是否相等。如下面的實例代碼:
public static void main(String[] args) {
String c1 = new String("abc");
String c2 = new String("abc");
String c3 = c1;
System.out.println("c2==c3的運算結果是:" + (c2 == c3));
System.out.println("c2.equal(c3)的結果是:" + c2.equals(c3));
}
運算結果是:
c2==c3的運算結果是:false
c2.equal(c3)的結果是:true
從上述結果看,由於c1與c2是兩個不同的對象引用,兩者在內存中的位置不同,er“String c3 = c1;”語句將c1的引用賦給c3,所以c1與c3這兩個對象引用是相等的,也就是打印c1 == c3這樣的語句將返回true值。