Как я могу использовать указатели в Java? - PullRequest
97 голосов
/ 17 ноября 2009

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

Ответы [ 14 ]

1 голос
/ 17 ноября 2009

Технически все объекты Java являются указателями. Все примитивные типы являются значениями. Нет никакого способа взять ручное управление этими указателями. Java просто внутренне использует передачу по ссылке.

0 голосов
/ 11 июля 2013

Все объекты Java являются указателями, потому что переменная, которая содержит адрес, называется указателем, а объект содержит адрес. Таким образом, объект является переменной указателя.

0 голосов
/ 27 января 2010

вы также можете иметь указатели на литералы. Вы должны реализовать их самостоятельно. Это довольно простой для экспертов;). Используйте массив int / object / long / byte и вуаля, у вас есть основы для реализации указателей. Теперь любое значение int может быть указателем на этот массив int []. Вы можете увеличить указатель, вы можете уменьшить указатель, вы можете умножить указатель. У вас действительно есть арифметика указателей! Это единственный способ реализовать 1000 классов атрибутов int и иметь универсальный метод, который применяется ко всем атрибутам. Вы также можете использовать массив byte [] вместо int []

Однако я бы хотел, чтобы Java позволяла передавать литеральные значения по ссылке. Нечто подобное

//(* telling you it is a pointer) public void myMethod(int* intValue);

0 голосов
/ 17 ноября 2009

Как уже говорили другие, короткий ответ - "Нет".

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

Вы всегда можете имитировать пуанты, создавая массив и работая с индексами в массиве. Опять же, в зависимости от того, чего вы пытаетесь достичь, это может или не может быть полезным.

...