int a =10, b= 20;
int sum = a + b;
Student s1 = new Student();
Student s2 = new Student();
s1+s2 //오류 발생
s1.grade = 100;
s2.grade = 90;
int sum = s1.grade + s2.grade //연산가능
기본형을 제외한 나머지는 모두 참조형이다.
1. 기본형은 소문자로 시작한다. int, long, double, boolean 모두 소문자로시작.
String은 클래스이나 기본형처럼 문자값을 바로 대입가능. 자주사용되므로 자바에서 편의 기능을 제공하는것
기본형, 참조형 모두 변수에 있는 값을 복사해서 대입한다.
기본형은 해당 값을 복사해서 대입하므로 2개이다.
참조형은 객체의 위치를 가르키는 참조만 복사해 대입한다. 메모리에서는 하나이다.
public class Main {
public static void main(String[] args) {
int a = 10;
System.out.println(a);//10
changePrimitive(a);
System.out.println(a); //10
}
static void changePrimitive(int x){
x = 20;
}
}
public class Main {
public static void main(String[] args) {
Data dataA = new Data();
dataA.value = 10;
System.out.println(dataA.value); //10
changeReference(dataA);
System.out.println(dataA.value); //20
}
static void changeReference(Data dataX){
dataX.value = 20;
}
}
참조형인 Student 인스턴스에 접근해 값을 바꾸면 실제 메모리가 변경된다.
이를 이용해 메소드를 만들어 코드의 중복을 제거한다.
참조값을 반환하기 때문에 해당 주소값(student1에 저장됨)만 있으면 외부에서 메모리에 접근가능하다.
public class Main {
public static void main(String[] args) {
Student student1 = createStudent("학생1", 15, 90);
Student student2 = createStudent("학생2", 16, 80);
printStudent(student1);
printStudent(student2);
}
static Student createStudent(String name, int age, int grade){
Student student = new Student();
student.name = name;
student.age = age;
student.grade = grade;
return student; // 참조값반환
}
static void printStudent(Student student){
System.out.println("이름: "+student.name + " 나이:"+ student.age + " 성적:"+ student.grade);
}
}