Java指针行为

时间:2014-02-17 17:15:43

标签: java pointers

所以几天前我正在尝试使用置换算法并发现了一些东西。

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中没有指针吗?那怎么可能呢???

2 个答案:

答案 0 :(得分:2)

在java中,数组是引用类型,因此只复制它们的引用。引用类型的行为类似于指针。

int是值类型,因此会复制它们的值。

a = {'x','y','z'};函数中尝试chomp。它不会改变任何东西,因为你不会改变a处的值,而是改变它本身的值。

答案 1 :(得分:2)

Java是pass by value - 始终。原语和引用是传递的东西。

当然,你的例子都是正确的。

数组示例能够执行交换,因为您没有更改指向数组的引用。你可以冒险进入它的状态,因为你可以自由地处理任何可变对象。

知道这一点很重要,因为对象存在于堆上。您没有将对象传递给方法;你在堆上传递对象的引用。您无法修改引用,但如果它是可变的,您可以修改它指向的对象的状态。