기본 타입과 참조 타입
- 기본 타입은 스택 영역에 즉시 저장된다.
- 참조 타입은 힙 영역에 저장되고 그 위치를 스택 영역에 저장한다.
- 참조 타입의 값 비교는 epuals를 사용한다.
- 참조 타입은 스택 영역에 주소 만을 가진다.
- 참조 타입은 대문자로 작성한다.
메모리의 3영역
- 메소드 : 클래스 정보나 메소드 정보를 담아둠. 명령어를 담아둠
- 힙 : 참조 타입 변수를 저장함
- jvm스택 : 기본 타입 변수를 저장함.
참조 타입의 특징
- String 처럼 일반 변수와 달리 대문자로 시작함
- 열거, 클래스(String), 인터페이스, 배열 등이 존재한다.
비교 연산자의 특징
- stack 영역의 값을 비교한다.
- String의 값을 비교하면 주소만 비교하여 결과를 출력한다.
String과 참조 타입
- String의 값 비교는 .equals()로 비교
package pack01.exstring;
import java.util.Scanner;
public class Ex01_String {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str1 = "CD";
String str2 = "CD";
String str3 = scan.nextLine();
System.out.println("str1 : "+ System.identityHashCode(str1));
System.out.println("str2 : "+ System.identityHashCode(str2));
System.out.println("str3 : "+ System.identityHashCode(str3));
if (str1 == str2) {
System.out.println("메모리 번지 수 같음");
} else {
System.out.println("메모리 번지 수 다름");
}
if (str1.equals(str2)) {
System.out.println("값 같음");
} else {
System.out.println("값 다름");
}
}
}

null과 null pointer exception
- String의 값으로 null을 넣을 수 있다.
- null으로 선언 시 힙 영역의 위치만 지정하고 내 값은 부여하지 않는다.
- 값이 없는 변수를 가져오고자 하는 경우 null pointer exception 오류가 발생한다.
- exception : 프로그램이 실행 된 후 발생하는 오류(예외)
- 변수 선언 후 초기화 전에 사용하려는 것과 같은 현상.
- 해결 방법 : 해당 객체가 null이 아닌 상태로 만든다. null을 if문으로 체크해서 해당 코드가 실행이 안 되도록 막는 방법도 있다.
- new 명령을 통해 새로운 객체를 생성하고 거기에 값을 할당할 수 있다.
package pack01.exstring;
import java.util.Scanner;
public class Ex02_StringNull {
public static void main(String[] args) {
Scanner scan = null;
String str1 = new String("A");
String str2 = new String("A");
// if (scan != null) {
// scan.nextLine();
// }
// if (null != scan) {
// scan.nextLine();
// }
if (str1 == str2) {
System.out.println("같음");
} else {
System.out.println("다름");
}
}
}
배열
- 많은 양의 데이터를 적은 코드로 처리하는 방법
- 동일한 자료형에 정해진 수를 저장하고 사용하는 객체이다.
- 각 데이터는 index 주소로 구분한다.
- 배열의 크기는 변경이 불가능하다.
- 배열의 선언 int[] intArr = new int[10];
- 각 배열의 값은 intArr[0] 식으로 접근
테스트
- int형 데이터 타입을 묶어 놓은 배열 intArray를 선언
- intArray를 크기 10을 주고 초기화를 한다.
- for문으로 전체 배열에 값을 할당
- for문으로 전체 배열에 값을 출력
- for문을 이용해 전체 배열의 평균값을 출력
package Pack02.exarray1;
public class Test01_Array {
public static void main(String[] args) {
int[] intArr = new int[10];
for (int i = 0 ; i<10; i++) {
intArr[i]=i+1;
System.out.println(intArr[i]);
}
double sum = 0;
for (int i=0; i<10; i++) {
sum+= intArr[i];
}
System.out.println(sum/10);
}
}

배열
- 데이터 타입[] : 1차원 배열, 데이터가 1개 이상 있다.
- 내용물 없고, 길이도 모르지만 변수 명은 선언하고 싶은 경우 =null로 초기화한다.
- String 타입을 담을 수 있는 sArr라는 배열을 만들고 크기 10을 할당하기
- 각 배열의 index에 이름 1~10까지의 값을 저장하고 출력
public class Ex02_Array {
public static void main(String[] args) {
String[] sArr = new String[10];
for (int i=0; i<10; i++) {
sArr[i] = "이름" + (i+1);
System.out.println(sArr[i]);
}
}
}

테스트
- 구구단 2단 결과를 모두 저장할 수 있는 배열을 자유롭게 만들고 저장 후 출력하기
- 출력 결과도 배열로 작성하기
- 배열을 이용하여, 배열에 다음의 값들이 for문을 이용해서 저장 되게 하고 출력하기
- 0~4까지 ★1~5개 찍기
package Pack02.exarray1;
public class Test02_Array {
public static void main(String[] args) {
int[] multi = new int[9];
for (int i=0; i<9; i++) {
multi[i] = (i+1) * 2;
System.out.println("2 x " + i +" = " + multi[i]);
}
String[] star = new String[5];
for (int i=0; i<5; i++) {
star[i]="";
for (int j = 0; j<= i ; j++) {
star[i] += "★";
}
System.out.println(star[i]);
}
}
}

'공부일지' 카테고리의 다른 글
230926 (Java) (0) | 2023.09.26 |
---|---|
230926 (HTML) (0) | 2023.09.26 |
230925 HTML (0) | 2023.09.25 |
230922 (Java) (0) | 2023.09.22 |
230922 (HTML) (0) | 2023.09.22 |