问题描述
- java 此程序为啥有着这种结果呢?求大神们解释下。谢谢
-
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; // 将类成员变量赋值为60 // 使用第一个对象调用类成员变量 System.out.println("第一个实例对象调用变量i的结果:" + t1.i++); t1.call(); // 使用第一个对象调用类成员方法 // 使用第二个对象调用类成员变量 System.out.println("第二个实例对象调用变量i的结果:" + t2.i); t2.call(); // 使用第二个对象调用类成员方法 }
}
问题:
1.其中t1.i++ 是否等价于 t1.i +1;
2. 为啥结果中t2.i=3?
第一个实例对象调用变量i的结果:60
调用call()方法
0 1 2第二个实例对象调用变量i的结果:3
调用call()方法
0 1 2
解决方案
其中t1.i++ 是否等价于 t1.i +1;
对于当前行,是这样的,但是不同于 t1.i +1,这会使得t1.i自己也增加一。相当于 t1.i = t1.i +1
static int i = 47;
因此i是在t1 t2共享的,你调用了call或者t2.i t1.i++等都会导致它被更改。
解决方案二:
只是想纠正一下,如果观点不同的话也请忽略。。。
1.其中t1.i++ 是否等价于 t1.i +1; //在此题中t1.i=i;因为是先调用,后自增,不然结果就是61了;
2. 为啥结果中t2.i=3?//原因是调用了call()方法,for循环中将i初始化为0,然后递增到3跳出循环,便就是t2.i=3了
第一个实例对象调用变量i的结果:60
调用call()方法
0 1 2
第二个实例对象调用变量i的结果:3
调用call()方法
0 1 2
时间: 2024-10-28 03:18:38