返回带赋值运算符的对象与不赋值运算符之间没有区别

时间:2016-11-04 03:09:05

标签: java

我希望这不是重新发布的帖子。我无法找到任何能回答我问题的内容,所以我决定这样做。

比如说我有一个

String [] arrayS = new String [2];

我为字符串数组分配了单词

arrayS[0] = Hello;
arrayS[1] = World;

现在我有一个String []方法。

public static String [] change(String [] sArray, String newWord){
        //Do Stuff
    return sArray;
    }

因此,当我返回方法时,无论是否有赋值运算符,我仍然得到相同的结果。 实施例...

//This result
String newWord = Hi;
arrayS = change(arrayS, newWord); // With assignment operator.
for(String word:arrayS)
    System.out.println(word);

//Is the same as this result
String newWord = Hi;
change(arrayS, newWord); // No assignment operator.
for(String word:arrayS)
    System.out.println(word);

有什么理由为什么会这样?我一直认为你返回时必须有一个赋值操作符。但是当我打印出arrayS时,它给了我同样的功能。

1 个答案:

答案 0 :(得分:1)

您实际上并没有返回对象,而是返回对象的引用。

public static String [] change(String [] sArray...

表示该方法接受对String[]的引用,并返回对String[]的引用。这也意味着,即使这些引用按值传递,您对本地sArray进行的任何修改都会将其反映到对象本身。{/ p>

赋值运算符与您需要执行的操作之间没有直接关联。如果该方法返回change,则表示它可以返回与传递的String[]不同的内容,否则根本没有理由返回任何内容,只会使代码的可读性降低。 / p>

例如,在执行类似

的操作时,返回值可能有意义
sArray

但是在你的情况下没有任何意义,你可以在其中重新分配一个值,使一切变得更加混乱。

值得注意的是,这些注意事项并不适用于原始类型,它是通过值传递的值。