Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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中按值传递与按引用传递_Java_Pass By Reference_Pass By Value - Fatal编程技术网

java中按值传递与按引用传递

java中按值传递与按引用传递,java,pass-by-reference,pass-by-value,Java,Pass By Reference,Pass By Value,好的,如果java中的原始数据类型被传递到方法中,它们将被视为传递值。如果对象数据类型被传递到方法中,它们将被视为按引用传递,对吗?所以在这段代码中: //Class 1 public void passByValue(int x){ x = 0; } public void passByReference(Integer y){ y= 40; } //MainClass(contains main method) int primitiveType = 50;

好的,如果java中的原始数据类型被传递到方法中,它们将被视为传递值。如果对象数据类型被传递到方法中,它们将被视为按引用传递,对吗?所以在这段代码中:

//Class 1
public void passByValue(int x){
    x = 0;
}

public void passByReference(Integer y){
    y= 40;
}

//MainClass(contains main method)

    int primitiveType = 50;
    Integer wholeInteger = 100;
    Class1 a = new Class1();

    a.passByValue(primitiveType);
    a.passByReference(wholeInteger);

    System.out.println(primitiveType);
    System.out.println(wholeInteger);
这将导致primitiveType等于50(变量未更改)。我知道,但是整数对象也没有改变。。。那么这是如何工作的呢?谢谢

对象引用也按值传递。传递的是引用,而不是对象。将对象的按引用传递和引用的按值传递混淆

A x=new A()
中,符号
x
是对类型A的对象的引用

如果
x
是一个引用,而
f(aa){a=null;}
是一个方法,那么
f(x)
将不会将x设置为null。因此,引用是按值传递的


这背后的原因(以及你的困惑)是,在某种程度上,“对象经过…”这个短语已经错了。因为我们必须正确地说“对象引用经过…”。如果
A
是一个类,那么
A
表示a是对
类别a
的对象的引用。如果这一点很清楚,那么就很清楚为什么我们有一个传递值。

首先,在java中,传递对象时没有传递引用,那么它也是传递值

其次,像字符串类一样,包装类Integer也是不可变的

当你写整数y=40时;然后新对象新整数(40);正在由java支持的自动装箱功能创建


这就是为什么。。。。您通过的整个整数的值没有变化。

这个问题已经被问了很多次了。。。Java是“按值传递”的,对对象的引用也是按值传递的——因此您不需要更改发送的引用!请查看我的答案,好的,那么Collections.sort()呢?您不必这样做:“listName=Collections.sort(listName);”相反,您可以这样做:“Collections.sort(listName);”并且listName将被排序(即更改)。所以它是通过引用传递的。listName是一个引用。引用是按值传递的。那么,为什么我的代码示例不起作用呢。。?我的意思是Collections.sort()和我的方法有什么区别?您刚刚承认引用是通过值传递的。。。那么这到底是什么意思呢?哦,既然每个人都把这个问题标为重复问题,我为什么在阅读了其他所谓的重复问题后再次问这个问题,我不理解“将对象指针作为值传递”的全部内容,这就是为什么我再次问这个问题,以获得更清晰的回答。像这样严重地说是没有意义的,为什么不让java对象通过引用传递呢?我的意思是什么白痴使它如此复杂?我相信这是因为在Java中只有对对象的引用(所以Java中的A是C++中的A*A)。如果你考虑一个字段(成员),这是很清楚的。该字段是对对象的引用。我们可以通过值或引用来传递引用。通过引用传递它就是将一个引用传递给一个引用(这更复杂)。那么Collections.sort()和我的方法之间有什么区别呢?你能解释一下吗?