111 - exercise 5
一
public class Dummy {private static int a = 3;private static int b = 5;private static int c = 7;public static void main(String... arguments) {int a = 1, b = 2;System.out.println("" + a + (a - b) + c);}
}
这个Java程序中有两个a和b变量,一个是类变量(private static),一个是方法内部的局部变量。程序的运行逻辑如下:
变量解释:
• 类的静态变量:
• a = 3
• b = 5
• c = 7
• main方法内部:
• 局部变量:a = 1, b = 2
代码分析:
1. 在main方法内部,有局部变量a = 1和b = 2,它们会覆盖类中的静态变量a和b。
2. System.out.println("" + a + (a - b) + c); 语句会按顺序执行:
• a的值是1(局部变量)。
• (a - b) 等于 1 - 2 = -1。
• c 的值是 7(类的静态变量)。
3. 表达式的计算顺序:
• 由于+操作符在Java中是从左到右结合的,所以首先执行"" + a,这会将a的值 1 转换为字符串,得到 "1"。
• 然后执行 "1" + (a - b),即 "1" + -1,得到 "1-1"。
• 最后执行 "1-1" + c,即 "1-1" + 7,得到字符串 "1-17"。
注:
在 Java 中,+ 操作符有两种功能:
1. 数值相加:当两个操作数都是数字时,+ 会执行普通的加法运算。
2. 字符串拼接:当其中一个操作数是字符串时,+ 操作符会将另一个操作数转换为字符串,并进行字符串拼接。
二
public static int test(int a, int b, int c) {b = c;System.out.println("" + c + b + a);return a + b + c;
}public static void main(String... arguments) {int a = 5, b = 4, c = 3;a = test(c, b, a);System.out.println("" + a + b + c);
}
1. main方法的初始变量:
• a = 5
• b = 4
• c = 3
2. 调用test方法:
在main方法中,调用了test(c, b, a),此时参数传递如下:
• a = 3(c的值)
• b = 4(b的值)
• c = 5(a的值)
3. 进入test方法:
• 在test方法中,首先执行 b = c;,因此 b 的值被更新为 c 的值,即 b = 5。
• 然后执行 System.out.println(“” + c + b + a);,我们按顺序拼接输出:
• c = 5(没有改变)
• b = 5(已经在上一步更新为5)
• a = 3(传入的参数)
因此,打印结果为:553。
• 最后,test方法返回 a + b + c 的值,即 3 + 5 + 5 = 13,将其返回给main方法中的a。
4. 返回main方法:
• 返回值 13 赋给 main 方法中的 a,因此现在 a = 13。
• b 和 c 保持不变,分别是 b = 4 和 c = 3。
5. 第二次输出:
• 在main方法中,执行 System.out.println(“” + a + b + c);,这会输出:
• a = 13
• b = 4
• c = 3
因此,输出结果为:1343。
输出结果:
整个程序的输出将会是:
1. 调用test方法时输出:553
2. 在main方法中输出:1343