public class Test2
{
public void add(Byte b)
{
b = b++;
}
public void test()
{
Byte a = 127;
Byte b = 127;
add(++a);
System.out.print(a + " ");
add(b);
System.out.print(b + "");
}
}
A:127 127
B:128 127
C:129 128
D:以上都不对
这道题我是栽了跟头了的,还栽了两次,第一次选的 C,第二次选的 B,都错了,那这个时候是不是有人就可能要说,那这题是不是要选 A 啊,我说这题你要是选 A 的话你就有点过分了啊小老弟,我在做这道题的时候最先也是最有把握排除的就是 A 选项,至于为什么,你只要 “++a” 是个什么意思你绝对不会选它的。
我当时第一次为什么选 C 呢,是因为 Byte 是个引用类型,所以我当时想的是add方法传的是引用类型(也就是俗称的引用传递,注意java是没有引用传递的,只有值传递,这里的引用传递其实最终传的就是引用的内存地址值)。在add方法里面的操作会影响到a、b的值,因此我才选的 C。
然后第二次我学聪明了,我知道Byte类型在执行 “++” 运算时会自动拆箱,因此这里的add方法是值传递。在add方法里面的操作不会影响到a、b的值,当然了, 这个 “++a”,还是会影响的,所以我满怀信心的选了 B,我心想这次还能错,我就不行了,难道还能选 D 不成,结果一看,好嘛,我又错了,唉,人生就是这样,处处充满惊喜,脸也被打的啪啪响。
至于为什么这题选 D 呢。其实我在选 B 时的思路是对的,就是漏了一点,Byte类型值大小为-128~127之间。add(++a);这里++a会越界,a的值变为-128,所以最后答案输出为:
-128 127 。因此这题选 D ,下面附个答案截图: