Передать по значению в Java - PullRequest
0 голосов
/ 08 июня 2011
import java.util.Arrays;
public class Test {
    public static void main(String... args) {
        String[] strings = new String[] { "foo", "bar" };
        changeReference(strings);
        System.out.println(Arrays.toString(strings)); // still [foo, bar]
        changeValue(strings);
        System.out.println(Arrays.toString(strings)); // [foo, foo]
    }
    public static void changeReference(String[] strings) {
        strings = new String[] { "foo", "foo" };
    }
    public static void changeValue(String[] strings) {
        strings[1] = "foo";
    }
}

Может кто-нибудь объяснить эти вопросы?

  1. Что такое строки []. Является ли это String Object или String Object, содержащий массив объектов.
  2. Что делают и возвращают функции changeReference () и changeValue ()?
  3. Поддерживает ли Java передачу по ссылке?

Ответы [ 4 ]

4 голосов
/ 08 июня 2011
  1. strings - это массив String с. Массивы являются объектами для наших целей здесь, что означает, что они являются ссылочным типом.

  2. changeReference ничего полезного не делает. Он получает ссылку на strings, но получает эту ссылку по значению. Переназначение strings внутри функции не влияет на передаваемый strings - оно просто заменяет локальную копию ссылки ссылкой на новый массив. changeValue, с другой стороны, изменяет объект массива, на который ссылается strings. Поскольку это ссылочный тип, переменная ссылается на тот же объект.

  3. Нет, «передача по ссылке» не поддерживается. Java может передавать ссылки, но передает их по значению. Таким образом, вы можете изменить передаваемый объект, но вы не можете заменить объект таким образом, чтобы вызывающий его увидел.

2 голосов
/ 08 июня 2011

Что такое строка [].Является ли это String Object или String Object, содержащий массив объектов.

String[] является массивом String (а String является объектом).

Что делают и возвращают функции changeReference и changeValue?

В changeReference() java изменяет ссылку strings на новый массив строк,В changeValue() java изменяет значение первого элемента массива strings.

Поддерживает ли Java передачу по ссылке?

Java поддерживает Passпо значению .Как указано в JavaWorld :

Java манипулирует объектами по ссылке, и все переменные объекта являются ссылками.Однако Java не передает аргументы метода по ссылке;он передает их по значению.

2 голосов
/ 08 июня 2011

Что такое строки []. Является ли это String Object или String Object, содержащий массив объектов.

Это ни то, ни другое. Это объект (ну, на самом деле это тип ), который ссылается на массив строк.

Что делают и возвращают функции chanfeReference и changeValue?

Пожалуйста, попробуйте сами, чтобы увидеть эффект.

Поддерживает ли Java передачу по ссылке?

Нет. Java всегда передается по значению.

1 голос
/ 08 июня 2011
  1. String[] - массив объектов String
  2. changeReference изменяет ссылку на массив strings на новую ссылку на новый массив, который в этом случае содержит то же самое, но ссылка в памяти находится в другом месте.
  3. Передача по ссылке не поддерживается в Java
...