Scanner scanner = new Scanner(System.in);
자동완성하면 (sc만 치고 ctrl
+space
???)
import java,util.Scanner;
위에 알아서 뜬다.
Scanner
는 참조 타입.
참조 타입의 본체(?)가 들어 있는 공간은 힙(Heap)이라고 한다.
모든 클래스들은 heap에 넣어져 있다.
기본 타입 변수와 참조 타입의 주솟값??은 스택(stack)에 들어 있다.
참조 타입 주솟값은 OxAAFF33 이런 식으로..? 16진수로 돼있다?
메소드 영역(Method Area)은 기억해두자.
메모리 영역(Runtime Data Area)에는
메소드 영역에는
클래스의
자바가 꺼지기 전까지 메소드 영역은 안 꺼짐.
항상 사용하는 애들 넣어두는 곳.
먼저 들어간 애가 먼저 나오는 것.
일반적이다.
근데 경우에 따라서는 이렇게 하는 게 안 좋은 경우가 있음.
스택... 차곡 차곡 쌓이다.
이런 거 ctrl
+ z
같은 데서
push
: 스택에 집어넣는 명령어.pop
: 스택에서 꺼내는 명령어.new
를 써서 만든 String은
문자열 리터럴로 만든 거랑 다르게
==
연산 결과로 값을 비교하지 않고 객체의 주솟값을 비교한다.
원본문자열.equals(비교문자열)
일케 해라.
참조를 잃은 객체는 heap에서 사라지지 않고, 연결만 끊어진다.
heap에 남은 객체의 데이터는 쓰레기 객체로 취급되어(연결 끊긴) Garbage Collector가 메모리에서 알아서 제거함.
형식1 = 타입[] 변수
형식2 = 타입 변수[]
[]
넣어줌.int[] intArray;
double[] doubleArray;
String[] strArray;
int[] a = {1, 2, 3};
System.out.println(a); // 주소를 hash 통과 시켜서(암호화?) 보여줌.
int[] a = {1, 2, 3};
System.out.println(a[0]); // 인덱스 0번 값 보기.
// 세 사람 이름을 넣고, 그 배열 출력.
String[] students = {"홍길동", "전우치", "임꺽정"};
for (int i = 0; i < students.length; i++) {
System.out.println(students[i]);
}
for ( String student : students ) {
System.out.println(student);
}
배열에 공간 먼저 마련해서 값 집어넣기.
int[] intArray = new int[3]; // 3은 3칸짜리 만들겠단 뜻
int[] intArray = new int[3]; // 3은 3칸짜리 만들겠단 뜻
for (int i = 0; i < intArray.length; i++) {
System.out.println(intArray[i]);
}
// 자동완성에 forEach 치면 나오는 애.
for (int i : intArray) {
System.out.println(i);
}
System.arraycopy()
배열은 한 번 생성하면 길이가 고정되어 바꿀 수 없다.
더 긴 배열을 만들어서 복붙한 뒤에 더 넣고 싶은 값을 넣는 방법밖에 없다.
-> 초기 컴퓨터는 이랬는데,
요즘 나온 언어들은... 다 알아서 바꿔 줌.
자바에서도 List라는 걸 만들어서 그 기능을 제공해 줌.
List ArrayList
컬렉션 프레임워크.
<>
여기다 넣을 객체 타입을 적는다.
List<String> li = new ArrayList<String>();
List<String> arrayList = new ArrayList<String>();
arrayList.add("홍");
arrayList.add("전");
arrayList.add("임");
arrayList.add("김"); // 배열과 달리 추가 가능.
for (String string : arrayList) {
System.out.println(string);
}