在学习新的编程语言时,您可能遇到的一个可能的障碍是,默认情况下,该语言是按值传递还是按引用传递.
所以这是我对你们所有人的问题,用你最喜欢的语言,它是如何实际完成的?什么是可能的陷阱?
language-agnostic oop parameters pass-by-reference pass-by-value
可能重复: Java是否通过引用传递?
public class myClass{
public static void main(String[] args){
myObject obj = new myObject("myName");
changeName(obj);
System.out.print(obj.getName()); // This prints "anotherName"
}
public static void changeName(myObject obj){
obj.setName("anotherName");
}
}
Run Code Online (Sandbox Code Playgroud)
我知道Java通过值传递,但为什么它obj在前面的示例中通过引用传递并更改它?
java terminology parameter-passing pass-by-reference pass-by-value
我曾经认为Java支持传递值和passby参考,但我遇到了许多讨论,如
如果java只支持按值传递
怎么做java.util.Array.sort()或Collections.sort(unsortList)有效?
int iArr[] = {2, 1, 9, 6, 4};// sorting array
Arrays.sort(iArr);
System.out.println("The sorted int array is:");
for (int number : iArr) {
System.out.println("Number = " + number);
}
Run Code Online (Sandbox Code Playgroud)
更新: 传递引用的内容(按值)实际上是什么意思?它与通过C或C++中的数组的引用行为有什么不同?
更新:
如果我错了,请纠正我.在C中,我们在通过引用传递时传递变量的地址.在Java中,我们将引用传递给对象(或值).只要方法中的变量指向Object,对象的值就会随着变量而变化.调用的方法.
没有Object或reference的副本!我只能看到2个不同的变量指向同一个Object,而不是通过引用传递.在C++中的类似传递引用两个不同的变量指向同一个地址.