0
Not passing by reference
public class MyClass { public static void main(String[ ] args) { String s = new String("hello"); change(s);//not passing by reference System.out.println(s); } static void change(String foo) { foo = "hi"; } }
4 Answers
+ 11
It IS passing.
But you should know, that every time you assing value - reference is switching to another block of memory.
So you dont touch passed block.
To change it you should change the value directly. Use built-in 'Mutable' types for that purpose
+ 9
Man, if you will say
pointer1 = pointer2
It will NOT change the value on pointer1, it will just update the pointer variable
+ 1
Java is a Object Oriented Pass by Value language. If you want to access the String s within the same class you'll need to change its scope.
public class MyClass{
static String s;
public static void main(String[ ] args) {
s = new String("hello");
change();
System.out.println(s);
}
static void change() {
s = "hi";
}
}
Also as mentioned Strings are not mutable. If you want to create an String Object and be able to change its value, use the StringBuilder or StringBuffer (thread safe) class.
public class MyClass{
public static void main(String[ ] args) {
StringBuilder s = new StringBuilder("hello");
change(s); // pass by value a copy of the object and its references
System.out.println(s);
}
static void change(StringBuilder s) {
s.replace(0, s.length(), "hi");
}
}
0
what do you mean by another block of memory , when reference is passed ie string foo =&s. it should change its value ,but it is not doing so