Я сталкивался с двумя сценариями.
Тот, в котором массив передается в качестве аргумента методу, и если он обновляется в вызываемом методе, он также отражается в вызывающем методе.
Но во втором сценарии объект String передается в качестве аргумента.Объект обновляется в вызываемом методе, но не отражается в вызывающем методе.
Я хочу понять, в чем разница между двумя, хотя в обоих случаях передается значение (ссылки)в качестве аргумента.Ниже приведены фрагменты.
Сценарий 1:
class Test {
public static void main(String[] args){
int a[] = {3,4,5};
changeValue(a);
System.out.println("Value at Index 1 is "+a[1]);
}
public static void changeValue(int b[]){
b[1] = 9;
}
}
Вывод:
Value at Index 1 is 9
Здесь ссылка (адрес памяти), связанная с массивом a
, передается вchangeValue
.Следовательно, b
просто указывает на тот же адрес, что и a
.Следовательно, говорю ли я b[1]
или a[1]
, это относится к одному и тому же адресу памяти.
Сценарий 2:
public class Test {
public static void main(String[] args){
String value = "abc";
changeValue(value);
System.out.println(value);
}
public static void changeValue(String a){
a = "xyz";
}
}
Вывод:
abc
Если я применяю ту же логику здесь, ссылка на строковый объект VALUE (адрес памяти) передается в changeValue, которая принимается a
.Следовательно, теперь a
должно ссылаться на ту же область памяти, что и VALUE.Поэтому, когда a="xyz"
выполняется, он должен заменить "abc"
на "xyz"
.
Может кто-нибудь указать, где мое понимание не так?Заранее спасибо !!