public class StringTest {
public static void main(String[] args) {
String str = "apple";
func(str);
System.out.println(str);
}
public static void func (String str) {
str = "banana";
}
}
String 은 참조변수로 알고있는데
함수에 건내준 str이 변해도 str 값이 변하질 않네요
왜그런거에요?
public class StringTest {
public static void main(String[] args) {
String str = "apple";
func(str);
System.out.println(str);
}
public static void func (String str) {
str = "banana";
}
}
두 참조변수가 apple을 참조하다가 하나를 banana로 바꾼거임 ㅇㅇ
그럼 힙영역에 두개가 생긴거야?
이게 pool인가 뭔가 그거인가
참조는 넘겨주는데 다시 할당하네. 특별한거 아니면 저렇게 하면안됨
pass by reference, pass by value에 대한 개념을 잡고 보면 해결됨
스트링은 참조변수라던데? 힙에 들어가는애들이고 이건 불변성하고 관계있는거아님?
좆바같은 더러운 언어는 같은 리터럴 문자열도 여러개 생성될 수 있어서 == 연산자와 equals가 다르게 작동하거든
갓샵같은 세련된 언어는 리터럴 문자열당 스트링풀에 단 1개씩만 생성되니까 == equals 똑같음
그리고 pass by reference, pass by value를 확인하고 저 코드를 보면 문제가 해결될테니 구글링해서 개념잡고 보면 됨
인자로 넘길때 객체 자체가 넘어가느냐? 이러면 좆같아지니까 pass by ref or val 둘중 하나인데 참조변수(포인터)를 하나 만들어서 그걸 저 메서드내에서 변수로 쓰잖아? 원시타입처럼 값참조이면 복사해서 쓰일테고 이런 개념
그러니까 국비학원에서 자바 들어가기 전에 선행과목을 C언어 학습시켜야한다니까....
String은 불변객체라 객체의 값을 바꾸는게 아니라 새로운 String 객체를 할당해주는거임