【问题标题】:Java--make changes on argument without returning a new variable [duplicate]Java - 在不返回新变量的情况下更改参数[重复]
【发布时间】:2019-04-16 01:51:06
【问题描述】:

我正在尝试在 Java 中反转字符串中的单词。它最初作为 char 数组传递。我尝试的方法是将其转换为 String 数组,进行更改,然后将其转换回 char 数组。但是,即使我尝试将新数组引用到原始数组,也不会对作为参数传入的原始数组进行更改。当我们必须修改参数而不在函数中返回任何内容时,我该如何处理这种情况?谢谢。

public static void main(String[] args) {
    char[] s = new char[] {'t','h','e',' ','s','k','y',' ','i','s',' ','b','l','u','e'};
    reverseWords(s);
    System.out.println(s);
}

public static void reverseWords(char[] s) {
    String str = new String(s);
    String [] strArray = str.split(" ");

    int n = strArray.length;
    int begin;
    int end;
    int mid = (n-1)/2;

    for (int i=0; i<=mid; i++) {
        begin = i;
        end = (n-1) -i;
        String temp = strArray[begin];
        strArray[begin] = strArray[end];
        strArray[end] = temp;   
    }
    String s_temp =  Arrays.toString(strArray).replace("[", "").replace("]", "").replace(",", "");
    s = s_temp.toCharArray();
    System.out.println(s);
}

【问题讨论】:

    标签: java pass-by-reference


    【解决方案1】:

    你不能s = ...

    但是,您可以将字符插入现有的s 数组,调用者将看到更改后的值。

    替换这个:

    s = s_temp.toCharArray();
    

    与:

    for(int i = 0; i < s_temp.length(); i++) {
        s[i] = s_temp.charAt(i);
    }
    

    或使用System.arraycopy()

    【讨论】:

    • 谢谢!有用!但我想知道为什么s = s_temp.toCharArray(); 不起作用?
    • 因为您将局部变量s 设置为引用toCharArray() 返回的数组,所以调用该方法的代码中的变量也不会更改 - 它仍然会引用原始大批。因此,您需要更改原始数组中的数据。
    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2014-01-10
    • 1970-01-01
    • 2022-11-03
    • 2016-08-13
    • 2016-05-25
    相关资源
    最近更新 更多