Why does function modify array[0] but not string in Java? -


this question has answer here:

code

public class foo {      public static void main(string[] args) {          //declaring , initializing string variable 'str' value "outside"         string str = "main";          //declaring , initializing array 'array' values         string [] array = {"main"};          //printing values of str , array[0]         system.out.println("str : " + str + " , array[0] : " + array[0]);          //calling function foo()         foo(str, array);          //printing values after calling function foo()         system.out.println("str : " + str + " , array[0] : " + array[0]);     }      static void foo(string str, string[] array){         str = "foo";         array[0] = "foo";     }  } 

output

str : main , array[0] : main   str : main , array[0] : foo 

question

why string str remains same "main" value of array[0] gets modified "main" "foo" after calling function foo()? shouldn't effect same?

no shouldn't, because of how java deals references.

you give method 2 parameters: string (that is, address string) , array (that is, address array). these addresses stored locally in str , array, if change addresses, addresses outside method (str , array of main()) won't change.

then create string "foo" , assign (or rather, adress) local str. won't have effect on str of main(). however, array address local, what's inside array not. if write

array = {"foo"}; 

that wouldn't affect array of main(),

array[0] = "foo"; 

you change inside array you've given reference.


Comments

Popular posts from this blog

sequelize.js - Sequelize group by with association includes id -

android - Robolectric "INTERNET permission is required" -

java - Android raising EPERM (Operation not permitted) when attempting to send UDP packet after network connection -