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值。