左移运算符应用于数组元素,但未修改数组
The left-shift operator is applied to an array element, but the array is not modified
package sample;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
A a = new A();
System.out.println(Arrays.toString(a.array));
a.leftShiftArrayElem();
System.out.println(Arrays.toString(a.array));
System.out.println(a.t);
a.leftShiftField();
System.out.println(a.t);
}
static class A {
byte[] array = new byte[] {
1, 2, 3
};
int t = 4;
int leftShiftArrayElem() {
int len = array[0] << 2;
return len;
}
int leftShiftField() {
int p = t << 2;
return p;
}
}
}
我确定:
int len = array[0] << 2;
表示 "modify array[0] and assign the
new value to
len`",
int p = t << 2;
表示 "modify t
and assign the new value to p
."
我得到的输出:
[1, 2, 3]
[1, 2, 3]
4
4
我期望的输出:
[1, 2, 3]
[4, 2, 3]
4
16
Java 中的赋值并不是这样的。当你写
array[0] << 2
,您没有将此值显式分配回 array[0]
。您实际上是在使用 array[0]
.
值的副本
因此,没有任何修改。你可以试试int len = array[0] = array[0] << 2
您执行的更改很好但忘记分配输出值,更改:
a.leftShiftField();
至:
a.t = a.leftShiftField();
第一项也是如此,为了进行转换,您必须将其分配回数组,更改:
int len = array[0] << 2;
至:
array[0] = array[0] << 2;
(如果你想 return 你可以 return array[0]
的值)
表达式 array[0]
是一个 array access expression。在运行时它
refers to a variable that is a component of an array.
在表达式中
int len = array[0] << 2;
array[0]
求得数组中元素的值。然后,您应用 <<
使用该值和值 2
作为其操作数。与数组或其元素无关。
package sample;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
A a = new A();
System.out.println(Arrays.toString(a.array));
a.leftShiftArrayElem();
System.out.println(Arrays.toString(a.array));
System.out.println(a.t);
a.leftShiftField();
System.out.println(a.t);
}
static class A {
byte[] array = new byte[] {
1, 2, 3
};
int t = 4;
int leftShiftArrayElem() {
int len = array[0] << 2;
return len;
}
int leftShiftField() {
int p = t << 2;
return p;
}
}
}
我确定:
int len = array[0] << 2;
表示 "modifyarray[0] and assign the new value to
len`",int p = t << 2;
表示 "modifyt
and assign the new value top
."
我得到的输出:
[1, 2, 3]
[1, 2, 3]
4
4
我期望的输出:
[1, 2, 3]
[4, 2, 3]
4
16
Java 中的赋值并不是这样的。当你写
array[0] << 2
,您没有将此值显式分配回 array[0]
。您实际上是在使用 array[0]
.
因此,没有任何修改。你可以试试int len = array[0] = array[0] << 2
您执行的更改很好但忘记分配输出值,更改:
a.leftShiftField();
至:
a.t = a.leftShiftField();
第一项也是如此,为了进行转换,您必须将其分配回数组,更改:
int len = array[0] << 2;
至:
array[0] = array[0] << 2;
(如果你想 return 你可以 return array[0]
的值)
表达式 array[0]
是一个 array access expression。在运行时它
refers to a variable that is a component of an array.
在表达式中
int len = array[0] << 2;
array[0]
求得数组中元素的值。然后,您应用 <<
使用该值和值 2
作为其操作数。与数组或其元素无关。