System.out.println("1.문자열을 char배열로 변환");
String temp = "hello~java!";
char[] tempArr =temp.toCharArray();
for(int i=0;i<tempArr.length;i++)
System.out.println(String.format("tempArr[%d] = %c\n", i,tempArr[i]));
System.out.println(Arrays.toString(tempArr));
System.out.println("2.char배열을 문자열로 변환");
tempArr[5]='*';
temp = String.valueOf(tempArr); //문자열로 변환후에 temp에 넣어줌
System.out.println(temp + ",문자열 길이 : " + temp.length());
System.out.print(tempArr); //tempArr 을 출력을 위해 자동으로 String변환
System.out.println(",배열 길이 : " + tempArr.length);
System.out.println(tempArr + ",배열 길이 : " + tempArr.length);
//문자열과 char배열의 + 연산을 실행하면 char 배열의 String 자동변환 하지 않음.
//[C@7a79be86 에서 7a79be86 는 해시코드값이고 해시함수를 통해서 만들어지는 4바이트 값.
// 자바의 객체들을 식별하기 위해 객체가 갖는 여러가지 값들을 복합적으로 계산해서 만듭니다.
public class A40CallByRef {
public static void main(String[] args) {
int test = 100;
changeTest(test);
System.out.println("changeTest 실행 후 test = " + test);
int[] intArr = {1,2,3,4,5};
changeIntArr(intArr);
System.out.println("changeIntArr 실행 후 intArr = " + Arrays.toString(intArr));
System.out.println(intArr.hashCode());
String temp = "hello";
changeString(temp);
System.out.println("changetString 실행 후 main 지역변수 temp = " + temp);
private static void changeString(String temp) {
temp =temp.replace("ll", "**");
//문자열은 문자열 내용이 바뀌면 객체의 위치가 바뀝니다.(불변 객체)
// -> temp가 "hello" 를 참조했던 값에서 "he**o" 객체의 참조값으로 바뀝니다.
System.out.println("changetString 메소드 지역변수 temp =" + temp);
}
private static void changeIntArr(int[] temp) {
//temp는 changeIntArr 메소드의 지역변수이다. 메소드가 changeIntArr(intArr); 실행될 때
// intArr 배열의 참조값을 temp 가 전달받아 저장합니다.
temp[3]=100;
}
private static void changeTest(int test) {
test = 200;
}
}
출력을 해보면 스트링에 의한 해쉬타입은 같게 나온다 하지만 참조하고 있는 위치가 다르다