강의로 돌아가기
HJ

왜 참조형 변수는 11이 출력되나요

{10}을 한자리씩 1씩 증가했고
arr[0]을 출력했으면 2가 출력되야 하는거 아닌가요ㅠ

작성중인 코드―ReferenceTypeExam.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class ReferenceTypeExam{
    public static void main(String []args){
        ReferenceTypeExam exam = new ReferenceTypeExam();

        //기본형 변수value1을 addOne에 전달합니다.
        int value = 10;
        exam.addOne(value);
        System.out.println("기본형 변수의 값을 다른 메소드에서 변경한 결과: "+value);

        //참조형 변수arr을 addOne에 전달합니다.
        int []arr = {10};
        exam.addOne(arr);
        System.out.println("참조형 변수의 값을 다른 메소드에서 변경한 결과: "+arr[0]);
    }


    public void addOne(int value){
        value++;
    }

    public void addOne(int[] arr){
        for(int i = 0; i<arr.length ; i++){
            arr[i] ++;
        }
    }
}
1 개의 답변
황세연

배열 변수에 값을 넣어 선언할 때는
변수타입[] 배열명 = {넣고싶은 값의 목록}
의 방식으로 선언합니다.
예를들어 배열 arr[0],arr[1],arr[2] 가 각각 1,2,3의 값을 갖게 하고 싶다면
int[] arr = {1,2,3};
와 같이 선언 할 수 있습니다.
그러므로 int []arr = {10};
의 의미는
arr[0] = 10;
입니다.

다시 메소드로 돌아가서
addOne안에 있는 for문은
초기화식에 의해
int i 를 처음에 0으로 초기화 하고
arr[i]에 대입합니다.
arr[0] = 10; 이므로
값은 10이 되겠지요?
그때 증감연산자 ++ 을 이용하여 숫자를 더해주면 값은 11이 됩니다.
그 뒤 for 문의 증감식에 의해 i 가 1로 증가하면
해당 for 문의 조건식 i < arr.length;를 만족할 수 없습니다.
왜냐하면 arr.length는 1이기 때문이죠.
그렇기 때문에 for문이 끝나게 되고
메인메소드에서 addOne의 메소드를 더한 arr[0]의 값은
11이 됩니다.

  • 자율주행차 개발
    최고의 설명이세요 자율주행차 개발 2018.06.17 18:54
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.