美文网首页
java 关于数组引用的问题

java 关于数组引用的问题

作者: Aaron_Swartz | 来源:发表于2019-09-26 01:18 被阅读0次

练习leetcode 189 题目时出现的问题

public static void rotate(int[] nums, int k) {
        if (nums == null || nums.length < 1 || k < 1) {
            return;
        }
        int len = nums.length;
        k = k % len;
        int[] res = new int[len];
        for (int i = 0; i < len; ++i) {
            if (i < k) {
                res[i] = nums[len - k + i];
            } else {
                res[i] = nums[i - k];
            }
        }
        System.out.println("ok");
//        nums = res;
        nums = Arrays.copyOf(res, res.length);
        System.out.println("ok");
    }

    public static void main(String[] args) {
        int[] temp = new int[]{1, 2, 3, 4, 5, 6, 7};
//        int[] res = Solution189.rotate(temp, 3);
        Solution189.rotate2(temp, 3);
        System.out.println(temp);
    }

这段代码在测试中即使最后函数中的nums已经修改了,但是函数外的值始终无法改变,导致我这边在不断调试。
最后发现是数组和对象一样都是引用传递,在函数中只是将新引用赋值给临时引用,但是此时函数外部的引用并没有变化。

java中基本类型是值传递,数组和对象以及字符串等是作为引用传递的

在Java中,Java的函数参数在传递的时候有两种方式。对于基本类型,如int,double等作为函数参数传递时,采取的是传值方式。而对于对象,如数组、字符串等作为参数传递时,采用的是引用方式,即此时在函数中对传递的对象的修改将完全影响原对象。但是你这里主函数中的unsort数组还是只想原来的内存。

// 最后修改后的答案
class Solution {
    public void rotate(int[] nums, int k) {
        if (nums == null || nums.length < 1 || k < 1) {
            return;
        }
        int len = nums.length;
        k = k % len;
        int[] res = Arrays.copyOf(nums, nums.length);
        for (int i = 0; i < len; ++i) {
            if (i < k) {
                nums[i] = res[len - k + i];
            } else {
                nums[i] = res[i - k];
            }
        }
    }
}

相关文章

  • java 关于数组引用的问题

    练习leetcode 189 题目时出现的问题 这段代码在测试中即使最后函数中的nums已经修改了,但是函数外的值...

  • 20160710_Programming

    ------JAVA20160710------1、实际的数组对象存储在堆内存中,如果引用该数组对象的数组引用变量...

  • 引用类型数组

    数组是对象 在Java中,数组属于引用类型数据数组数据在堆中存储,数组变量属于引用类型,存储数组对象的地址信息,指...

  • 数组引用问题

    var a=[1,2,3];var b=a;a=[4,5,6];alert(b);//[1,2,3] 面试时被问到...

  • 4.1.1为什么要使用数组

    Java数组是有序的元素集合,数组元素可以是基本类型,也可以是对对象的引用其他数组的引用。数组本身也是扩展自 Ob...

  • Java- 一维数组:

    Java- 一维数组: 使用语法 elementType[] arrayRefVar(元素类型[] 数组引用变量)...

  • Java Se遇到的基本问题

    1.如何解决数组中的按顺序输出的问题,引用util容器文件 Array.sort为从小到大的排序,在引用java....

  • Java学习之数组

    标签: java 数组 声明数组语法: 声明并开辟数组: 数组的数据类型 数组是引用类型。 动态初始化数组 先开辟...

  • Java 数组

    Java 中,数组是一种引用类型。 Java 中,数组是用来存储固定大小的同类型元素。 数组对象(这里可以看成一个...

  • 第二部分:java类与对象

    关于Java对象作为参数传递是传值还是传引用的问题 Java中@Override的作用 Java 访问权限修饰符p...

网友评论

      本文标题:java 关于数组引用的问题

      本文链接:https://www.haomeiwen.com/subject/nrevuctx.html