Java passByValue или путаница со ссылками

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

 public static void main(String[] args){
     int[] arr = {1,2,3,4,5}; 
     Integer b = 6;      
     String s = "ABC";

     fun(arr, b,s);
     for(int i : arr)
         System.out.print(i + " ");
     System.out.println();
     System.out.println("b="+b);
     System.out.println("s="+s);
 }   

 public static void fun(int[] a, Integer b, String s){
     b = b*10;       
     for(int i =0; i<a.length; i++)
     {
         a[i] = a[i]+10;
     }       
     s=s+"PIY";
 }

Теперь это дает следующий вывод:

11 12 13 14 15 
b=6
s=ABC

Я не понимаю, почему массив изменяется, но строки и целые числа не меняются внутри функции.

1 ответ

Массив является объектом и Integer а также String неизменны в Java. Вы не можете изменить неизменяемый объект по ссылке. Вы должны повторно установить / переназначить, чтобы увидеть изменения. Отсюда и разница.

Ваша логика применяется и корректна в случае общих объектов, которые не являются неизменными

Другие вопросы по тегам