所以几天前我正在尝试使用置换算法并发现了一些东西。
int y=5;
chomp(y);
System.out.println(y); Output is still 5. Obviously.
void chomp(int x){
y=y-1;
}
问题从这里开始。
char[] a = {'a','b','c'};
chomp(a);
System.out.println(a);
void chomp(char[] a){
char temp = a[1];
a[1]=a[2];
a[2]=temp;
}// It swapped it, But I didnt return anything. And I didnt do "a = chomp(a);"
但我的输出是acb。为什么???我尝试使用int并且没有任何影响,根据我在c和c ++中的经验,因为char数组给出了地址或其他东西。但是java中没有指针吗?那怎么可能呢???
答案 0 :(得分:2)
在java中,数组是引用类型,因此只复制它们的引用。引用类型的行为类似于指针。
int
是值类型,因此会复制它们的值。
在a = {'x','y','z'};
函数中尝试chomp
。它不会改变任何东西,因为你不会改变a处的值,而是改变它本身的值。
答案 1 :(得分:2)
Java是pass by value - 始终。原语和引用是传递的东西。
当然,你的例子都是正确的。
数组示例能够执行交换,因为您没有更改指向数组的引用。你可以冒险进入它的状态,因为你可以自由地处理任何可变对象。
知道这一点很重要,因为对象存在于堆上。您没有将对象传递给方法;你在堆上传递对象的引用。您无法修改引用,但如果它是可变的,您可以修改它指向的对象的状态。