Java 为什么不是';每次乘法后更新的变量的t值?
为什么每次在Java 为什么不是';每次乘法后更新的变量的t值?,java,immutability,Java,Immutability,为什么每次在System.out.println()中进行乘法运算后,我的变量poc的值不更新 p、 这不是家庭作业。我是Java新手,我正在努力掌握传递值的概念。我不明白为什么每次在println语句中相乘时,poc的值没有更新。例如,在以下代码中,每次都会更新变量poc public static void main(String[] args) { byte poc = 0b0001; System.out.println("The value of by
System.out.println()中进行乘法运算后,我的变量poc
的值不更新代码>
p、 这不是家庭作业。我是Java新手,我正在努力掌握传递值的概念。我不明白为什么每次在println
语句中相乘时,poc
的值没有更新。例如,在以下代码中,每次都会更新变量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
的语句,它只是一个返回乘法结果的表达式
++poc
是一个表达式,既递增poc
(赋值),又返回赋值结果
请注意,您可以使用*=
()通过在括号中包围poc*0b0010
来实现这一点,以便在字符串连接中创建一个:
System.out.println("The value of byte " + poc
+ " when multiplied by 0010 is: " + (poc*=0b0010));
有关算术和作业的完整教程,请参见
也看到和
†有关按值传递的信息,请参阅中的“传递基本数据类型参数”一节。这实际上与按值传递无关†
poc*0b0010
不是将poc*0b0010
的结果赋给poc
的语句,它只是一个返回乘法结果的表达式
++poc
是一个表达式,既递增poc
(赋值),又返回赋值结果
请注意,您可以使用*=
()通过在括号中包围poc*0b0010
来实现这一点,以便在字符串连接中创建一个:
System.out.println("The value of byte " + poc
+ " when multiplied by 0010 is: " + (poc*=0b0010));
有关算术和作业的完整教程,请参见
也看到和
†有关传递值的信息,请参见中的“传递基本数据类型参数”一节。发生这种情况的原因是poc*0b0010
仅返回一个值,而++poc
增加poc
的值,然后返回更新后的poc
值
本质上,++poc
是poc=poc+1的简写代码>注意如何将poc+1
的结果分配给poc
然而,poc*0b0010
只是执行并返回的算术运算,而不是分配给任何对象
如果使用了poc*=0b0010
,则表达式将等效于poc=poc*0b0010
最后请注意:这种行为实际上与按值传递与按引用传递无关,而是与赋值以及算术和一元运算之间的差异有关。发生这种情况的原因是因为poc*0b0010
只返回一个值,而++poc
则增加poc
的值,然后返回poc
的更新值
本质上,++poc
是poc=poc+1的简写代码>注意如何将poc+1
的结果分配给poc
然而,poc*0b0010
只是执行并返回的算术运算,而不是分配给任何对象
如果使用了poc*=0b0010
,则表达式将等效于poc=poc*0b0010
最后一点注意:这种行为实际上与按值传递与按引用传递无关,而是与赋值以及算术和一元运算之间的差异有关。为什么要更新它?您刚刚得到了一个表达式poc*0b0010
-为什么希望它会更改poc
的值?这里并没有和参数传递相关的内容,只是表达式x*y
的问题,它既不改变x
也不改变y
…你们认为*
做了什么?你认为++
做什么?你为什么这么认为?为什么要更新?您刚刚得到了一个表达式poc*0b0010
-为什么希望它会更改poc
的值?这里并没有和参数传递相关的内容,只是表达式x*y
的问题,它既不改变x
也不改变y
…你们认为*
做了什么?你认为++
做什么?你为什么这么认为?我试过在ingSystem.out.println()
中使用poc*=0b0010,但我无法编译。这是否意味着除了variable++,我不能在System.out.println()
中为变量赋值?@KrausVonKraken,我只是创建了一个编辑,向您展示了如何操作-我必须在JLS中找到复合赋值运算符的引用!现在可以了,所以我不得不用括号。谢谢你。@KrausVonKraken。对请参阅:我已尝试在ingSystem.out.println()
中使用poc*=0b0010,但无法编译。这是否意味着除了variable++,我不能在System.out.println()
中为变量赋值?@KrausVonKraken,我只是创建了一个编辑,向您展示了如何操作-我必须在JLS中找到复合赋值运算符的引用!现在可以了,所以我不得不用括号。谢谢你。@KrausVonKraken。对请参阅:如果我使用带有print语句的poc*0b010
,我会得到编译错误:意外类型。我想我不能真正使用System.out.println
来赋值。(变量++赋值除外)但是,poc*0b0010
的结果不是字符串,这是方法签名所需要的。如果您将操作包装在类似System.out.println(Integer.toString(poc*0b0010))
的东西中,那么它就可以工作。如果我在print语句中使用poc*0b0010
,我会得到编译错误:意外的类型