Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不是';每次乘法后更新的变量的t值?_Java_Immutability - Fatal编程技术网

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
…你们认为
*
做了什么?你认为
++
做什么?你为什么这么认为?我试过在ing
System.out.println()
中使用poc*=0b0010,但我无法编译。这是否意味着除了variable++,我不能在
System.out.println()
中为变量赋值?@KrausVonKraken,我只是创建了一个编辑,向您展示了如何操作-我必须在JLS中找到复合赋值运算符的引用!现在可以了,所以我不得不用括号。谢谢你。@KrausVonKraken。对请参阅:我已尝试在ing
System.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
,我会得到编译错误:意外的类型