java - 左移运算符应用于数组元素,但未修改数组

标签 java arrays

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;
        }
    }
}

我确定:

  1. int len = array[0] << 2;意思是“修改 array[0] and assign the new value to len`”,
  2. int p = t << 2;意思是“修改 t 并将新值分配给 p 。”

我得到的输出:

[1, 2, 3]
[1, 2, 3]
4
4

我期望的输出:

[1, 2, 3]
[4, 2, 3]
4
16

最佳答案

表达式array[0]是一个 array access expression .在运行时它

refers to a variable that is a component of an array.

在表达式中

int len = array[0] << 2;

array[0]评估为数组中元素的值。然后您应用 <<使用该值和值 2作为它的操作数。与数组或其元素无关。

关于java - 左移运算符应用于数组元素,但未修改数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27847500/

相关文章:

java - 数组中的元素是对对象的引用还是对自身的引用?

arrays - 将字典值附加到 Swift 中的数组

java - 在 Java 8 中,reduce() 方法如何处理并行流?

java/android - 无法访问 SD 卡上的文件

java - Android:按下后退按钮时提示用户保存更改

java - 如何缓存 Apache CXF 为特定 Java 对象生成的编码 SOAP XML 以提高性能?

java - 从 AWS ECS 集群获取标签返回空列表

java - 使用@Query 在 ElasticSearch 中设置大小

PHP 函数检查两个数组是否相同,同时忽略指定键的值

c++ - 字符常量数组为空,即使已为其分配值 [C++]