为什么每次乘法后我的变量值都没有更新?

Why isn't value of my variable updated after every multiplication?

为什么我的变量 poc 的值在 System.out.println(); 内完成每次乘法后都没有更新?

public static void main(String[] args) {
    byte poc = 0b0001;

    System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
    System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
    System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
    System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
    System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
    System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
    System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
    System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
}

p.s。这不是家庭作业。我是 Java 的新手,我正在尝试掌握按值传递的概念。我不明白为什么 poc 的值每次在 println 语句中相乘时都不更新。例如,在下面的代码中变量 poc 每次都会更新。

public static void main(String[] args) {
        byte poc = 0b0001;

        System.out.println("The value of byte " + poc + " when incremented by 1 is: " + ++poc);
        System.out.println("The value of byte " + poc + " when incremented by 1 is: " + ++poc);
        System.out.println("The value of byte " + poc + " when incremented by 1 is: " + ++poc);
        System.out.println("The value of byte " + poc + " when incremented by 1 is: " + ++poc);
        System.out.println("The value of byte " + poc + " when incremented by 1 is: " + ++poc);
        System.out.println("The value of byte " + poc + " when incremented by 1 is: " + ++poc);
        System.out.println("The value of byte " + poc + " when incremented by 1 is: " + ++poc);
        System.out.println("The value of byte " + poc + " when incremented by 1 is: " + ++poc);
    }

为什么第二段代码更新了,第一段没有?

这真的和传值没关系

poc*0b0010不是将poc*0b0010的结果赋值给poc的语句,它只是一个returns乘法结果的表达式。

++poc 是一个既增加 poc(赋值)又增加 returns 赋值结果的表达式。

请注意,您可以在字符串连接中使用 *=a compound assignment operator) to do this by surrounding poc*0b0010 in brackets to create a Parenthesized Expression

System.out.println("The value of byte " + poc 
  + " when multiplied by 0010 is: " + (poc*=0b0010));

有关算术和赋值的完整教程,请参阅 The Java Tutorials > Assignment, Arithmetic, and Unary Operators

另见 JLS: 15.15.1. Prefix Increment Operator ++ and 15.17.1. Multiplication Operator *

有关按值传递的信息,请参阅 this java tutorial[= 中的 "Passing Primitive Data Type Arguments" 部分22=]

发生这种情况的原因是因为 poc*0b0010 只有 returns 一个值,而 ++poc 增加了 poc 的值然后 returns poc.

的更新值

本质上 ++pocpoc = poc + 1; 的 shorthand 注意 poc + 1 的结果是如何分配给 poc.

然而,poc*0b0010 只是执行并返回的算术,但没有分配给任何东西。

如果您使用 poc *= 0b0010 则表达式将等同于 poc = poc * 0b0010.

最后一点:这种行为实际上与按值传递与按引用传递没有任何关系,而是与赋值以及算术运算和一元运算之间的区别有关。