java中的指针实际存在吗?

时间:2009-12-14 13:01:52

标签: java pointers reference

我以为我在java方面很有经验,但似乎事实并非如此,我昨天注意到了一些事情,我以前用过的东西却从未真正意识到它的作用。我用谷歌搜索,但没有找到我的问题的答案。

如果我声明一个int数组,并使用Array的静态排序函数对我的数组进行排序,我只需要输入

Arrays.sort( numbers );

而不是

numbers = Array.sort( numbers );

在C和C ++中看起来很容易,因为你可以在那里使用指针。所以我想知道的是,这是怎么做到的?这是太阳的优势,还是我在这里完全没有意义?

5 个答案:

答案 0 :(得分:7)

指针存在于java中 - 所有非原始变量都是java中的指针,也就是引用。

它不支持与C tho中的指针相同的操作集 - 它们对语言的用户基本上是不透明的。

Arrays.sort(array)的工作原因是因为array是一个“指针”,它允许sort()函数访问array变量指向的内存位置。

现在,为什么不:

void swap (Integer a, Integer b) {
   Integer tmp = a;
   a = b;
   b = tmp;
}

如果你做了

Integer x = 1;
Integer y = 2;
swap(x,y);

它因为java传递值(这是一个与指针不同的概念)。指向1的指针赋予swap(),而不是变量x的值(它是内存地址或指针)。因此,操纵swap()中的参数不会影响变量x

答案 1 :(得分:5)

首先,它属于StackOverflow。其次,您想阅读文章Java is Pass-by-Value, Dammit!

答案 2 :(得分:4)

它就地对阵列进行排序。

sort方法接收对number数组(对象)的引用,并更改数组内的值!没有创建新的数组对象,因此将其传递给sort函数就足够了。

PS: Java的所有源代码都是开放的,您可以自己去阅读sort函数的来源。你会看到,没有魔法。如果在系统上正确安装了Java,则Java主文件夹中应该有src.zip

答案 3 :(得分:2)

我认为numbers是一个int数组,Java中的所有数组都是对象。因此,sort会传递对numbers的引用,并且可以对它们进行排序。

答案 4 :(得分:2)

这个问题应该迁移到Stack Overflow。 Java有一个NullPointerException类的事实应该会给你一个强有力的提示,告诉你Java是否使用了指向这些场景的指针。