当前位置: 首页 > 知识库问答 >
问题:

java中的字符数组不是通过引用[duplicate]传递的

虞航
2023-03-14

我在做一个leetcode问题(https://leetcode.com/problems/reverse-string/)当一个char数组被传递给一个方法时,该方法通过将数组指向一个新创建的数组来改变数组。但我发现调用函数中的数组保持不变?在java中数组是通过引用传递的,所以情况不应该是这样吗?

    public static void main(String[] args){

       char[] s = {'h','e','l','l','o'};
       reverseString(s);
       System.out.println(s);
        
    }

    public static void reverseString(char[] s) {

        char[] reverse = new char[s.length];


        for(int i = (s.length - 1); i >= 0; i--){
            reverse[(s.length-1) - i] = s[i];
        }

        s = reverse;
        System.out.println(s);
        System.out.println(reverse);
    }

输出:

olleh
olleh
hello

共有1个答案

唐默
2023-03-14

不能更改传递给方法的某个对象的引用,因为该引用仅在方法的范围内有效。相反,您可以返回更新后的字符数组,并更改外部变量的引用。

s = reverseString(s);
 类似资料:
  • 问题内容: 我遇到了这样一个事实,数组在多个位置通过引用传递,但是然后当我执行以下代码时,为什么和的行为之间有区别 我正在使用python 2.7和numpy版本1.6.1 问题答案: 在Python中,所有变量名都是对values的引用。 当Python评估分配时,右侧的评估先于左侧。创建一个新数组;它不会就地修改。 使局部变量引用此新数组。它不会修改传递给的原始引用的值。变量名称仅绑定到新数组

  • 问题内容: 我习惯在中执行以下操作: 输出为: 但是,在Java中,这似乎不起作用。我认为是因为该对象是复制的,而不是通过referenced传递的。我以为字符串是对象,总是通过引用传递。 这里发生了什么? 问题答案: 你有三种选择: 使用StringBuilder: 创建一个容器类,并将容器的实例传递给你的方法: 创建一个数组: 从性能的角度来看,StringBuilder通常是最佳选择。

  • 问题内容: 我认为几乎所有语言(包括Java)都将数组传递给函数作为引用(可修改)。 但由于某种原因,它在这里不起作用,并且大小仍为。 奇怪的是,如果我更改为它的话。它确实通过了引用。 此代码有什么问题? 最后,我有了;(更新a)。结果是否从堆栈中删除。这就是为什么我仍然要恢复原著a吗? 我很迷惑。 谢谢! 问题答案: 数组通过引用传递,但引用通过传递。也就是说,您可以更改所引用的数组,但是不能更

  • 问题内容: 我想将我的Swift传递 给引用(这样,当我向添加聊天时,仍指向)。即,当更改长度时,我不希望Swift将两个数组分开。 问题答案: Swift中的结构按值传递,但是您可以使用修饰符来修改数组(请参见下面的答案)。类通过引用传递。和在Swift中实现为结构。

  • 问题内容: 这两个代码有什么区别: 代码A: 哪里 VS. 代码B: 这两个代码之间有什么区别吗? 问题答案: Java始终按值传递参数,而不按引用传递参数。 让我通过一个例子解释一下: 我将逐步解释这一点: 声明一个名为ftype 的引用,Foo并将其分配给Foo具有属性的type的新对象”f”。 从方法方面,声明Foo具有名称的类型引用,a并将其初始分配给null。 调用方法时changeRe

  • 如果我将一个变量传递给一个函数,但将该变量标记为常量,它会自动通过引用传递吗? 测试后:没有,因为它打印不同的内存位置。 没有权利?因为我只能传递一个指向内存位置的指针,而不是真正通过引用。如下所示:在C中通过引用传递 这几乎就是我所做的Java和C#编译器在幕后所做的事情。