Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Arrays.sort()如何更改传递给它的变量?_Java_Arrays_Sorting - Fatal编程技术网

Java Arrays.sort()如何更改传递给它的变量?

Java Arrays.sort()如何更改传递给它的变量?,java,arrays,sorting,Java,Arrays,Sorting,可能重复: 我在这里有点困惑。Arrays.sort(a)如何修改a的值 int[] a = {9,8,7,6,5,4,3,2,1}; Arrays.sort(a); System.out.println(Arrays.toString(a)); 我以为java是按值传递的…是的,java是按值传递的。但是,这里通过值传递的是对数组的引用,而不是数组本身。Java中的对象是通过引用值传递的。因此,如果传入一个对象,它将获得引用的一个副本(如果将该引用指定给其他对象,则仅修改参数,原始对象仍然

可能重复:

我在这里有点困惑。Arrays.sort(a)如何修改a的值

int[] a = {9,8,7,6,5,4,3,2,1};
Arrays.sort(a);
System.out.println(Arrays.toString(a));

我以为java是按值传递的…

是的,java是按值传递的。但是,这里通过值传递的是对数组的引用,而不是数组本身。

Java中的对象是通过引用值传递的。因此,如果传入一个对象,它将获得引用的一个副本(如果将该引用指定给其他对象,则仅修改参数,原始对象仍然存在并由主程序引用)

这些是对对象的引用,但它们不会被交换,因为它们只是函数作用域中的内部引用。但是,如果您这样做:

var1.doubleValue()


它将使用对原始对象的引用。

True,Java总是按值传递,对于对象,对象的引用是按值传递的。因此,数组的引用是按值传递的。

数组。sort
不修改变量,它修改变量指向的数组对象

  • 它把它分类
  • 数组的引用按值传递。而不是数组本身

  • 数组的引用是通过值传递的,因此
    sort
    方法有自己的引用,它仍然引用与
    a
    引用相同的数组。这意味着
    sort
    可以更改
    a
    引用的同一数组的内容。

    此外,jdk附带了源代码,因此如果您想了解更多信息,可以查看它。只需扩展答案:这只起作用,因为sort不会更改数组的大小。如果你想这样做,你必须分配一个新的数组,而不能仅仅修改现有的数组。因此,如果你不想在不改变原始数组的情况下改变另一个方法中的数组,你应该复制它。对吗?@Josh:对。您可以使用
    a.clone()
    制作副本。+1请记住:只有引用是“克隆的”,而不是引用的对象。在大多数情况下,我们认为这是理所当然的,但出于某种原因,它会导致与数组的混淆。Java中的对象不会通过引用传递。当你把一个对象传递给一个函数时,你传递对象的引用(它的值),例如C++中,你可以通过引用,并且可以做指针运算,在java中你不能做。@ LuiggimMunZa我更喜欢把它看作一个“伪引用”。你可以用它来访问对象及其字段,但它不能与C风格的指针相比。你可以在理解它的时候随心所欲地接受这个概念,但不要说Java是通过引用传递的@aix answer用一种简单的方式解释了这一点。@LuiggiMendoza我恐怕不明白。我清楚地声明它是通过引用的值传递的。你对我回答的哪一部分有异议?
    public void badSwap(Integer var1, Integer var2)
    {
      Integer temp = var1;
      var1 = var2;
      var2 = temp;
    }