기본형
- 숫자 10,20 같은 실제 사용하는 값을 변수에 담을수 있다.
- 기본형은 연산이 가능하다.
int a=10 , b=20; int sum = a+b;
참조형
- 실제 사용하는 값을 변수에 담는 것이 아니다. 이름 그대로 실제 객체의(위치,주소)를 지정한다.
- 참조형에는 객체와 배열이 있다.
- 객체는 .(dot)통해서 메모리 상에 생성된 객체를 찾아가서 사용할 수 있다.
- 배열은 []를 통해서 메모리 상에 배열을 찾아가야 사용할 수 있다.
- 참조형은 기본형 처럼 연산이 불가능하다.
String
- 클래스의 한 종류라 참조형 변수중 하나이다.
package ref;
public class Varchange1 {
public static void main(String[] args) {
int a = 10;
int b = a;
System.out.println("a = " + a);
System.out.println("b = " + b);
a = 20;
System.out.println("a = " + a); // 20
System.out.println("b = " + b); // 10
b = 30;
System.out.println("a = " + a); // 20
System.out.println("b = " + b); // 30
}
}
package ref;
public class Data {
int value;
}
package ref;
public class Varchange2 {
public static void main(String[] args) {
Data dataA = new Data();
dataA.value = 10;
Data dataB = dataA; //B객체의 참조 주소를 A로 변경
System.out.println("dataA = " + dataA);
System.out.println("dataB = " + dataB);
System.out.println("dataA = " + dataA.value);
System.out.println("dataB = " + dataB.value);
dataA.value = 20; // 참조되는 값이 변경 됐기 때문에 B도 변경
System.out.println("dataA = " + dataA.value);
System.out.println("dataB = " + dataB.value);
dataB.value = 30; // A랑 B가 같은 주소를 가르키기 때문에 두개의 값이 바뀐다.
System.out.println("dataA.value = " + dataA.value);
System.out.println("dataB.value = " + dataB.value);
}
}
package ref;
public class MethodChange1 {
public static void main(String[] args) {
int a = 10;
System.out.println("메서드 호출전 a: " + a);
changePrimitive(a);
System.out.println("메서도 호출후 a: " + a);
}
public static void changePrimitive(int x){
x = 20;
}
}
package ref;
public class MethodChange2 {
public static void main(String[] args) {
Data dataA = new Data();
dataA.value = 10;
System.out.println("dataA = " + dataA.value);
changeRefernece(dataA);
System.out.println("dataA = " + dataA.value);
}
public static void changeRefernece(Data data){
data.value = 20;
}
}
package ref;
public class Method1 {
public static void main(String[] args) {
Student student1 = new Student();
initStudent(student1 , "학생1" , 15 , 97);
Student student2 = new Student();
initStudent(student2 , "학생2",19 , 90);
printStudent(student1);
printStudent(student2);
}
static void initStudent(Student student , String name , int age , int grade){
student.name = name;
student.age = age;
student.grade = grade;
}
static void printStudent(Student student){
System.out.println("이름:" + student.name + " 나이: " + student.age + " 성적: " + student.grade);
}
}
클래스 초기화 함수
package ref;
public class Method2 {
public static void main(String[] args) {
Student student1 = createStudents("학생1" , 15 , 97);
Student student2 = createStudents("학생2",17 , 90);
printStudent(student1);
printStudent(student2);
}
static Student createStudents(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);
}
}
변수의 종류
- 멤버 변수(필드): 클래스에 선언
- 지역 변수: 메서드의 선언,매개변수도 지역변수의 한종류이다.
public class Student[
String name;
int age;
int grade;
}
public class ST3{
public static void main(String[] args){
Student student1;
student1 = new Student();
Student student2 = new Student();
}
}
package ref;
public class MethodChange1 {
public static void main(String[] args) {
int a = 10;
System.out.println("메서드 호출전 a: " + a);
changePrimitive(a);
System.out.println("메서도 호출후 a: " + a);
}
public static void changePrimitive(int x){
x = 20;
}
}
변수의 값 초기화
멤버 변수
- 자동 초기화
- 인스턴스를 생성할때 자동으로 초기화 한다.
- 개발자가 초기값을 지정할 수 있다.
- 숫자는 0,boolean은 false, 참조형은 null로 초기화 한다.
- null은 참조할 대상이 없다는 뜻으로 사용된다.
package ref; public class InitData { // 멤버 변수 int value1; // 초기화 하지 않음 int value2 = 10;//10으로 초기화 }
package ref; public class InitMain { public static void main(String[] args) { InitData data = new InitData(); System.out.println(data.value1); // 초기화 안한 값 System.out.println(data.value2); // 초기화 한 값 } }
- value1은 초기화 하지 않아서 0출력 value2는 초기화 해서 10그대로 출력
지역 변수
- 수동 초기화
- 사용자가 직접 초기화 해야함
package ref;
public class NullMain1 {
public static void main(String[] args) {
Data data = null;
System.out.println("1. data = " + data);
data = new Data();
System.out.println("2. data = " + data);
data = null;
System.out.println("3. data = " + data);
}
}
package ref;
public class NullMain2 {
public static void main(String[] args) {
Data data = null;
data.value = 10;
System.out.println(data.value);
}
}
멤버 변수가 null
package ref;
public class BigData {
Data data;
int count;
}
package ref;
public class NullMain3 {
public static void main(String[] args) {
BigData bigData = new BigData();
System.out.println(bigData.count);
System.out.println(bigData.data);
System.out.println(bigData.data.value);
}
}