开发者社区> 问答> 正文

Java int二维数组值的变化

下面这段程序,为什么再次输出a的值的时候,已经变成了c的值了?有点诡异

public class Test {
public final int TYPE_ADD = 1;
/**
 * 矩阵类,实现n阶矩阵的加、乘、转置运算
 * 
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    int[][] a = { { 1, 2 }, { 2, 3 } };
    int[][] b = { { 4, 5 }, { 6, 7 } };
    Test m = new Test();

    System.out.println("输出原始矩阵a:");
    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[i].length; j++) {
            System.out.print(a[i][j] + "\t");
        }
        System.out.println();
    }

    System.out.println("两矩阵相加:");
    int[][] r = m.matrix_add(a, b);
    for (int i = 0; i < r.length; i++) {
        for (int j = 0; j < r[i].length; j++) {
            System.out.print(r[i][j] + "\t");
        }
        System.out.println();
    }

    System.out.println("再次输出原始矩阵a:");
    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[i].length; j++) {
            System.out.print(a[i][j] + "\t");
        }
        System.out.println();
    }
}

// 矩阵相加
public int[][] matrix_add(int[][] a, int[][] b) {
    int[][] c = a;
    if (inputLegal(a, b, TYPE_ADD)) {// 只有同型矩阵才能相加
        for (int i = 0; i < a.length; i++) {// i控制行
            for (int j = 0; j < a[i].length; j++) {// j控制列
                c[i][j] = a[i][j] + b[i][j];
            }
        }
    }
    return c;
}

// 矩阵类型校验
public boolean inputLegal(int[][] a, int[][] b, int type) {
    boolean flag = true;
    if (type == TYPE_ADD) {
        if (a.length != b.length || a[0].length != b[0].length) {
            flag = false;// 判断是否为同型矩阵
        }
    }
    return flag;
}
}

展开
收起
蛮大人123 2016-03-23 17:52:48 2306 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    matrix_add中有这句话不行int[][] c = a
    这样c就指向了a,他俩是同一个内容,数组是引用类型,修改c就是在修改a

    2019-07-17 19:11:37
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载