함수 호출 방법은 크게 두 가지이다.
- Call by value(값에 의한 호출)
- Call by refernce(참조에 의한 호출)
Call by value(값에 의한 호출)
: 인자로 받은 값을 복사하여 처리. 원래의 값 보존됨.
Call by reference(참조에 의한 호출)
: 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 줌. 원래의 값이 영향을 받음.
-> 값을 복사를 하여 처리를 하느냐, 아니면 직접 참조를 하느냐 차이
Call by value(값에 의한 호출)
장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존이 된다.
단점 : 복사를 하기 때문에 메모리가 사용량이 늘어난다.
Call by reference(참조에 의한 호출)
장점 : 복사하지 않고 직접 참조를 하기에 빠르다.
단점 : 직접 참조를 하기에 원래 값이 영향을 받는다.
기본 타입의 int
, char
형등은 Call by Value
형태로 기본적으로 대상에 주소값을 가지지 않는 형태로 사용됨.
하지만 String
은 일반적인 타입이 아니라 클래스기 때문에 기본적으로 Call by Reference
형태로 생성 시 주소값이 부여됨.
-> String타입을 선언 했을때는 같은 값을 부여하더라도 서로간의 주소값
이 다르다.
==
연산자는 비교하고자 하는 두개의 대상의 주소값
을 비교
String클래스의 equals
메소드는 비교하고자 하는 두개의 대상의 값
자체를 비교
결론 : 문자열 비교를 하기 위해서는
equals
메서드를 사용하면 두 비교대상의 주소값이 아닌 데이터값을 비교하기 때문에 정확한 비교가 가능하다.