Ch4
package question.q04;
public class Question04_01 {
public static void main(String[] args) {
int i= 5;
while(i-- !=0) {
System.out.println(i + " - I can do it.");
}
}
}
4 - I can do it.
3 - I can do it.
2 - I can do it.
1 - I can do it.
0 - I can do it.
i--여서 while(i-- != 0)에서 1일때 0으로 바뀐 i =0값이 System.out.println(i + " - I can do it.");으로 출력되서 나온다
Ch6
package question.q06;
class Data {
int x;
}
public class Question06_01 {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = "+ d.x);
change(d.x); //함수 호출
System.out.println("After change(d.x)");
System.out.println("main() : x = "+ d.x);
}
static void change(int x) { //기본형 매개변수
x = 1000;
System.out.println("change() = " + x);
}
}
결과값
main() : x = 10
change() = 1000
After change(d.x)
main() : x = 10
여기서 change()의 값이 먼저 나오게 된 이유는
change(d.x); 함수를 호출했기 때문에 결과값에서 change() = 1000이 먼저 나온다
package question.q06;
class Data2 {
int x;
}
public class Question06_02 {
public static void main(String[] args) {
Data2 d = new Data2();
d.x = 10;
System.out.println("main() : x = "+ d.x);
change(d);
System.out.println("After change(d)");
System.out.println("main() : x = "+ d.x);
}
static void change(Data2 d) { //참조형 매개변수
d.x = 1000;
System.out.println("change() = " + d.x);
}
}
main() : x = 10
change() = 1000
After change(d)
main() : x = 1000
여기서는 처음과 다르게 의 값이 10-> 1000으로 변경된다main() : x =
처음에는 기본형 매개변수여서 int x 여서 change메서드에서 매개변수 x의 값이 변경되서 main의 값은 변경되지 않고
밑에는 참조형 매겨변수여서 변수 d의 주소가 매개변수 d에 복사되어서 main의 값도 변경되었다
[참고자료]
☕ 그림으로 보는 자바 코드의 메모리 영역(스택 & 힙)
자바의 메모리 영역 이번 포스팅에선 자바(JAVA)를 사용하는 입장에서 알아야 할 메모리 구조 및 특징에 대해서 알아보려고 한다. 자바 프로그램이 실행되면 JVM(자바 가상 머신)은 OS로부터 메모
inpa.tistory.com
package question.q06;
public class Question06_03 {
public static void main(String[] args) {
MyMath3 mm = new MyMath3();
System.out.println("mm.add(3, 3) 결과:" + mm.add(3,3));
System.out.println("mm.add(3L, 3) 결과: " + mm.add(3L,3));
System.out.println("mm.add(3, 3L) 결과: " + mm.add(3,3L));
System.out.println("mm.add(3L, 3L) 결과: " + mm.add(3L,3L));
int[] a = {100, 200, 300};
System.out.println("mm.add(a) 결과: " + mm.add(a));
}
}
class MyMath3 {
int add(int a, int b) {
System.out.print("int add(int a, int b) - ");
return a+b;
}
long add(int a, long b) {
System.out.print("long add(int a, long b) - ");
return a+b;
}
long add(long a, int b) {
System.out.print("long add(long a, int b) - ");
return a+b;
}
long add(long a, long b) {
System.out.print("long add(long a, long b) - ");
return a+b;
}
int add(int[] a) {
System.out.print("int add(int[] a) - ");
int result = 0;
for(int i=0; i < a.length;i++)
result += a[i];
return result;
}
}
int add(int a, int b) - mm.add(3, 3) 결과:6
long add(long a, int b) - mm.add(3L, 3) 결과: 6
long add(int a, long b) - mm.add(3, 3L) 결과: 6
long add(long a, long b) - mm.add(3L, 3L) 결과: 6
int add(int[] a) - mm.add(a) 결과: 600
add메서드가 println메서드보다 먼저 호출되는 이유
System.out.println("mm.add(3, 3) 결과:" + mm.add(3,3));
여기서 mm.add가 실행되기 위해서는 밑에 add메서드가 먼저 실행 되어야 되서,
이때 Systehttp://m.out.print("int add(int a, int b) - "); 이부분이 println보다 몇초 빨리 실행하게 되서 먼저 나오게 되는거다