변수의 값을 읽기만 할 수 있다.
public class PrimitiveParamEx {
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="+x);
}
}
---- 결과 ----
main() : x = 10
change() : x = 1000
After change(d,x)
main() : x = 10
(1) change메서드가 호출되면서 'd.x'가 change메서드의 매개변수 x에 복사됨
(2) change메서드에서 x의 값을 1000으로 변경
(3) change메서드가 종료되면서 매개변수 x는 스택에서 제거됨
변수의 값을 읽고 변경할 수 있다.
public class ReferenceParamEx {
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() : x="+d.x);
}
}
class Data2{
int x;
}
(1) change메서드가 호출되면서 참조변수 d의 값(주소)이 매개변수 d에 복사됨.
(2) change메서드에서 매개변수 d로 x의 값을 1000으로 변경
(3) change메서드가 종료되면서 매개변수 d는 스택에서 제거됨
(예시1) 클래스, 생성자를 통한 좌표 찍기(참조형 매개변수 사용전)
import java.util.InputMismatchException;
import java.util.Scanner;
class Arrays{
int[][] arrays = new int[5][5]; // 2차원 배열 초기화
int row ; // 행(가로)
int column; // 열(세로)
public Arrays(int row,int column){ // 생성자 생성
this.row = row;
this.column = column;
}
public void info(){
for(int i =0; i<5; i++) { // 행 번호 설정
System.out.print(" " + i);
}
System.out.println(" ");
for(int i =0; i<5; i++){ // 열 번호 설정
System.out.print(i);
for(int j=1;j<6;j++){ // 좌표 설정 ex) (1,5)
System.out.print(" "); // 사용자가 입력한 값 이외의 자리 공백 출력
if(row==j && column==i){ // 사용자가 입력한 값일때
System.out.print("X"); // X 문자 출력
}
}
System.out.println("");
}
}
}
public class ArraysTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int row;
int column;
while(true) {
try { // try-catch문을 통해 예외처리
System.out.print("행 인덱스 입력 >>");
row = scan.nextInt(); // 행 입력
if(0>row || row>4){ // 0~4사이의 값이 아닐때 예외처리
System.out.println("0~4사이의 값을 입력하세요");
continue; // 다시 while문 돌아가서 반복
}
} catch (InputMismatchException e) { // 숫자외의 값을 입력시
System.out.println("숫자만 입력해주세요");
scan.nextLine(); // (중요!!) 버퍼의 입력값 제거 (제거하지 않으면 무한반복됨)
continue; // while문으로 돌아가서 반복
}
break; // 정상작동시 반복문 빠져나옴
}
while(true) {
try {
System.out.print("열 인덱스 입력 >>");
column = scan.nextInt();
if(0>column || column>4){
System.out.println("0~4사이의 값을 입력하세요");
continue;
}
} catch (InputMismatchException e) {
System.out.println("숫자만 입력해주세요");
scan.nextLine();
continue;
}
break;
}
Arrays arr = new Arrays(row,column); // 객체 생성 초기화
arr.info(); // 출력문 호출
}
}
(예시2) 클래스, 참조형 매개변수를 통한 좌표 찍기
import java.util.InputMismatchException;
import java.util.Scanner;
class arrtest{
int[][] arrays = new int[5][5]; // 2차원 배열 초기화
static int row ; // 행(가로)
static int column; // 열(세로)
public void info(){
for(int i =0; i<5; i++) { // 행 번호 설정
System.out.print(" " + i);
}
System.out.println(" ");
for(int i =0; i<5; i++){ // 열 번호 설정
System.out.print(i);
for(int j=1;j<6;j++){ // 좌표 설정 ex) (1,5)
System.out.print(" "); // 사용자가 입력한 값 이외의 자리 공백 출력
if(row==j && column==i){ // 사용자가 입력한 값일때
System.out.print("X"); // X 문자 출력
}
}
System.out.println("");
}
}
}
public class test {
public static void main(String[] args) {
arrtest arr = new arrtest();
input(arr);
arr.info(); // 출력문 호출
}
static void input(arrtest arr){ // 참조형 매개변수
Scanner scan = new Scanner(System.in);
int num;
for(int i=0; i<2; i++) {
try { // try-catch문을 통해 예외처리
if(i == 0)
System.out.print("행값 입력 >>");
else
System.out.print("열값 입력 >>");
num = scan.nextInt(); // 행 입력
if (0 > num || num > 4) { // 0~4사이의 값이 아닐때 예외처리
System.out.println("0~4사이의 값을 입력하세요");
i--;
continue; // 다시 while문 돌아가서 반복
}
} catch (InputMismatchException e) { // 숫자외의 값을 입력시
System.out.println("숫자만 입력해주세요");
scan.nextLine(); // (중요!!) 버퍼의 입력값 제거 (제거하지 않으면 무한반복됨)
i--;
continue; // while문으로 돌아가서 반복
}
if(i == 0) { // arrtest 클래스에 행/열 구분해서 값을 보내주기 위한 비교
arr.row = num;
}else {
arr.column = num;
break;
}
}
}
}
public class ReferenceReturnEx {
public static void main(String[] args) {
Data3 d = new Data3();
d.x = 10;
Data3 d2 = copy(d); // d2와 d는 서로 다른 객체 주소이다
System.out.println("d.x = "+d.x);
System.out.println("d2.x="+d2.x);
}
static Data3 copy(Data3 d){
Data3 temp = new Data3(); // temp와 d는 서로 다른 객체 주소
temp.x = d.x; // 주소값은 다르고 멤버변수 값만 저장
return temp; // temp 객체 주소 반환
}
}
class Data3{
int x;
}