"Java является pass-by-value
"
- Java Language Specification
Однако, есть вещи, которые меня смущает. Пожалуйста, проблеск моего примераJava - Параметр Передача Путаница
public class Main {
public static void main(String[] args) {
StringBuilder myBuilder = new StringBuilder("Michael");
editString(myBuilder);
System.out.println(myBuilder);
}
public static void editString(StringBuilder x){
x.append(" Ardan");
}
}
Выход:
Michael Ardan
И этот пример:
public class Main {
public static void main(String[] args) {
int myInt = 10;
editInt(myInt);
System.out.println(myInt);
}
public static void editInt(int x){
x ++;
}
}
Выход:
10
Я пытался читать другие статьи и его все говорит, что Java - это alwa ys pass-by-value
. Я сделал несколько тестовых сценариев. Сравнение обоих примеров друг с другом заставило меня подумать, что объекты Java - это pass-by-reference
, а примитивные типы - pass-by-value
. Однако, если вы попытались заменить примитивный тип int
на объект Integer
, результат будет таким же. Мне было бы интересно, если кто-нибудь объяснит эти два примера здесь.
В объектах Java всегда передаются по ссылке, а переменные - по значению. Также Строки являются неизменяемыми объектами. –
@ H-Patel каждая статья, даже JLS говорит, что Java строго передается по величине независимо от типа данных. –
@Thilo Это был хороший вопрос. Я также пробовал прочитать ответы и сделал свои сценарии. Я действительно спрашивал о том, что происходит за моими примерами. –