
📅2023. 12. 19 9일차
- String은 기본 타입(Primitive Type)이 아닌 참조 타입(Reference Type)이다. 즉 String은 클래스이다.
int 변수 num은 변수에 할당된 메모리에 값을 바로 저장하고 있기 때문에 10에서 20으로 값을 변경할 경우 변수가 갖고 있는 메모리에서 값을 변경한다. 10이라는 값이 할당되어 있던 메모리 내에 값을 20으로 변경한 것이기 때문에 가변이라고 한다.
반면에 String 변수 str의 경우는 다르다. 문자열 데이터는 스택 메모리에 직접 저장되는 것이 아니라 Heap영역 중에서 String constant pool이라는 곳에 메모리를 할당받아 거기에 값을 저장하고, str은 바로 그 주소 값을 참조하게 된다.
따라서, str = "abc" 후에 str = "def"가 실행되어 str이라는 변수가 갖는 참조 값이 0x 11에서 0x22로 바뀐다 하더라도 그건 str 변수가 갖는 참조값이 변경된 것이지 실제 "abc"가 저장되어 있는 0x11주소의 데이터가 바뀌는 것이 아니다.
java에서 String은 이렇게 불변성을 띈다.
- 키보드로 입력받기 위해 Scanner 라는 클래스를 쓴다.
1.기본적인 데이터 타입들을 Scanner 의 메소드를 사용하여 입력받을 수 있다.
2.Scanner 을 사용할 시 util 패키지를 경로의 Scanner 클래스를 호출해야 한다.
3.공백(띄어쓰기) 또는 개행(줄 바꿈)을 기준으로 읽는다.
- 클래스이름 객체이름 = new 클래스_이름();
(대체로 Scanner 의 경우 객체이름은 in, input, sc, scan 이렇게 4가지가 가장 많이 쓰인다.)
- Scanner in = new Scanner(System.in); // Scanner 객체 생성
- 주의할 것은 Scanner 을 생성할 때 System.in 이 들어간다는 점이다.
- System.in 은 사용자로부터 입력을 받기 위한 입력 스트림이다.
Scanner sc = new Scanner(System.in); // Scanner 객체 생성
String str = sc.nextLine(); // 입력받은 문자열을 str에 저장
- 기존의 for문과는 달리, for-each문은 배열의 크기만큼 루프를 돌면서 각 원소를 순차적으로 접근할 수 있다.
public class Main {
public static void main(String[] args) {
int [] n = {1, 2, 3, 4, 5};
int sum = 0;
for(int num : n) {
sum += num;
}
System.out.println(sum);
}
}
public class Main {
public static void main(String[] args) {
String names[] = {"사과", "바나나", "딸기", "포도", "수박", "복숭아"};
for(String fruits : names) {
System.out.print(fruits+" ");
}
}
}
public class Main {
enum Week {월, 화, 수, 목, 금, 토, 일};
public static void main(String[] args) {
for(Week day : Week.values()) {
System.out.print(day+"요일 ");
}
}
}
- 자바에서의 한글, char 비교, String 비교, equals, 메모리 절약
- toString, equals, Object 영상 보기
- Scanner 한 번 try 해보기