为什么每次乘法后我的变量值都没有更新?
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
.
的更新值
本质上 ++poc
是 poc = poc + 1;
的 shorthand 注意 poc + 1
的结果是如何分配给 poc.
然而,poc*0b0010
只是执行并返回的算术,但没有分配给任何东西。
如果您使用 poc *= 0b0010
则表达式将等同于 poc = poc * 0b0010
.
最后一点:这种行为实际上与按值传递与按引用传递没有任何关系,而是与赋值以及算术运算和一元运算之间的区别有关。
为什么我的变量 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
.
本质上 ++poc
是 poc = poc + 1;
的 shorthand 注意 poc + 1
的结果是如何分配给 poc.
然而,poc*0b0010
只是执行并返回的算术,但没有分配给任何东西。
如果您使用 poc *= 0b0010
则表达式将等同于 poc = poc * 0b0010
.
最后一点:这种行为实际上与按值传递与按引用传递没有任何关系,而是与赋值以及算术运算和一元运算之间的区别有关。