Существуют ли указатели в Java на самом деле? - PullRequest
2 голосов
/ 14 декабря 2009

Я думал, что я довольно опытный в Java, но, похоже, это не совсем так, я просто заметил кое-что вчера, то, что я использовал раньше, но так и не понял, что он сделал. Я погуглил, но не нашел ответа на свой вопрос.

Если я объявляю массив int и использую функцию статической сортировки Array для сортировки моего массива, мне просто нужно набрать

Arrays.sort( numbers );

Вместо

numbers = Array.sort( numbers );

Это может выглядеть очень легко в C и C ++, потому что вы можете использовать там указатели. Так что мне интересно, как это сделать? Солнце это преимущество, или я здесь совершенно бессмысленный?

Ответы [ 5 ]

7 голосов
/ 14 декабря 2009

Указатели существуют в 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.

5 голосов
/ 14 декабря 2009

Во-первых, это относится к StackOverflow. Во-вторых, вы хотите прочитать статью Java - передача по значению, черт побери!

4 голосов
/ 14 декабря 2009

Сортирует массив на месте.

Метод sort получает ссылку на массив number (который является объектом) и изменяет значения внутри массива! Новый объект-массив не создается, поэтому достаточно просто передать его в функцию sort.

PS: весь исходный код Java открыт, вы можете пойти и прочитать исходные тексты функции sort самостоятельно. Вот увидишь, магии не будет. Если Java правильно установлена ​​в вашей системе, в домашней папке Java должен быть src.zip.

2 голосов
/ 14 декабря 2009

Этот вопрос следует перенести в переполнение стека. Тот факт, что в Java имеется класс NullPointerException, должен дать вам четкий совет относительно того, использует ли Java указатели, следящие за сценой.

2 голосов
/ 14 декабря 2009

Я предполагаю, что numbers является массивом int, а все массивы в Java являются объектами. Поэтому sort передается ссылка на numbers, и он может сортировать их по месту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...