TIL
자바
int[] a;// 선언만
int[]a = null;// 선언 + 초기화
// null은 힙 메모리의 주소를 가리키고 있지 않음, 즉 연결된 실제 데이터가 없다!
int[] a;
a = new int[3];
// int 자료형 3개를 저장할 수 있는 공간을 힙 메모리에 넣고
// 그 주소를 참조 변수 a에 넣어라
int a;
int[] b;
System.out.println(a);// 출력 오류
System.out.println(b);// 출력 오류
int a = 0;
int[] b = null;
System.out.println(a);// 0
System.out.println(b);// null
int a = 3;
int b = a;
b = 7;
System.out.println(a);// 3
System.out.println(b);// 7
int[] a = {3, 4, 5};
int[] b = a;
b[0] = 7;
System.out.println(a[0]);// 7
System.out.println(b[0]);// 7
int[][] a = new int[2][];
a[0] = new int[2];// 첫 번째 행의 열의 갯수
a[0][0] = 1;
a[0][1] = 2;
a[1] = new int[3];// 두 번째 행의 열의 갯수
a[1][0] = 3;
a[1][1] = 4;
a[1][2] = 5;
int[][] a = new int[2][];
a[0] = new int[]{1, 2};
a[1] = new int[]{3, 4, 5};
String str1 = new String("안녕);
String str2 = str1;
str1 = "안녕하세요";
System.out.println(str1);// 안녕하세요
System.out.println(str2);// 안녕
String str1 = new String("안녕);
String str2 = "안녕";
String str3 = "안녕";
String str4 = new String("안녕);
String str1 = "안녕" + "하세요" + "!";
System.out.println(str1);// 안녕하세요!
String str2 = "반갑";
str2 += "습니다.";
str2 += "!";
System.out.println(str2);// 반갑습니다!
System.out.println(1 + "안녕");// 1안녕
System.out.println(1 + "안녕" + 2);// 1안녕2
System.out.println(1 + 2 + "안녕");// 3안녕
System.out.println("안녕" + 1 + 2);// 안녕3
String str1 = "Hello World";
String str2 = "안녕하세요! 반갑습니다."
// indexOf()
System.out.println(str1.indexOf('a'));// 7, 앞에서 부터 첫 번째 'a'가 위치한 인덱스
System.out.println(str1.indexOf('a', 8));// 뒤에 매개변수는 검색 시작 위치
// lastIndexOf()
System.out.println(str1.lastIndexOf('a'));// 뒤에서 부터 첫 번째 'a'가 위치한 인덱스
System.out.println(str1.lastIndexOf('a', 8));// 뒤에 매개변수는 검색 시작 위치
// String.valueOf() -> 문자열로 변환해준다
// concat() -> 문자열 변경
String str5 = str3.concat(str4);// str3과 str4를 이어 붙인다
// getBytes() -> 문자열을 byte[]로
byte[] array1 = str1.getBytes();
byte[] array2 = str2.getBytes();
// replace()
str.replace("이것을", "이것으로");
// subString()
str.subString(0, 5);// 0 <= X < 5 까지 가져온다
// split()
String[] strArray = "abc/def-ghi jkl".split("/|-| ");// | | 사이에 있는 것을 구분함
A a = new A();// A() 생성자로 만든 객체를 힙 메모리에 넣고, 주소를 A타입의 참조변수 a에 저장
class A {
int m = 3;// 필드
int n = 4;// 필드
void work1() {
int k = 5;// 지역변수
System.out.println(k);
work2(3);
}
void work2(int i) {// 지역변수
int j = 4;// 지역변수
System.out.println(i + j);
}
}
class A {
int m;// 강제 초기화
int n;// 강제 초기화
void work1() {
int k;
System.out.println(k);// 초깃값 없이 출력시 에러
}
}
A a = new A();
System.out.println(a.m);// 0
System.out.println(a.n);// 0
a.work1();// 에러
void printMonth(int m ) {
if (m < 0 || m > 12) {
System.out.println("잘못된 입력!");
return;// 메서드 종료
}
System.out.println(m + "월 입니다.");
}
int[] array = {1, 2, 3};
modifyData(array);
printArray(array);
public static void modifyData(int[] a) {
a[0] = 4;
a[1] = 5;
a[2] = 6;
}
public static void printArray(int[] a) {
System.out.println(Arrays.toString(a));
}
method1(1, 2);
method1(1, 2, 3);
method1();
method2("안녕", "방가");
method2("안녕", "방가", "감사");
method2();
public static void method1(int... values) {// 가변 길이 배열 입력매개변수
System.out.println("입력매개변수 길이 : " + values.length);
for (int i = 0; i < values.length; i++)
Sytem.out.print(values[i] + " ");
System.out.println();
}
public static void method2(String... values) {// 가변 길이 배열 입력매개변수
System.out.println("입력매개변수 길이 : " + values.length);
for (int i = 0; i < values.length; i++)
Sytem.out.print(values[i] + " ");
System.out.println();
}
A() {
System.out.println("첫 번째 생성자");
}
A(int a) {
System.out.println("두 번째 생성자");
}
A(int a, int b) {
System.out.println("세 번째 생성자");
}
public class ...
public static void main(String[] args) {
A a1 = new A();
A a2 = new A(3);
A a3 = new A(3, 5);
}
class A {
int m1, m2, m3, m4;
A() {
m1 = 1;
m2 = 2;
m3 = 3;
m4 = 4;
}
A(int a) {
this();// m2 ~ m4 A() 생성자 따름
m1 = a;
}
A(int a, int b) {
this(a);// A(int a) 생성자 따름
m2 = b;
}
class A {
int m = 3;
static int n = 5;
}
class A {
int a;
static int b;
static {
b = 5;
System.out.println("클래스가 로딩될 때 static block 실행");
}
A() {
a = 3;// 인스턴스 필드 초기화 위치
}
}
public class ...
public static void main(String[] args) {
System.out.println(A.b);// 클래스가 로딩될 때 static block 실행 -> 5
}
class A {
int m;
void abc(){...}
}
class B extends A {
int n;
void bcd(){...}
}
B b = new B();
B b = new B();
b.abc();// O
b.bcd();// O
A a = new B();
a.abc();// O
a.bcd();// X
class A {
void print1() {...}
void print2() {...}
}
class B extends A {
void print1() {...}// 오버라이딩
void print2(int a) {...}// 오버로딩
}
class A {int m = 3;}
class B extends A {int m = 4;}
class A {static int m = 3;}
class B extends A {static int m = 4;}
class A {
static void print() {...}
}
class B extends A {
static void print() {...}
}
public boolean equals(Object obj) {// 주소비교 -> 데이터 값 비교
if (obj instanceof B) {
if (this.name == ((B) obj).name)// 다운 캐스팅
return true;
}
}
class A {
String name;
A(String name) {this.name = name;}
@ override
public boolean equals(Object obj) {
if (obj instanceof A) {
if (this.name == ((A) obj).name)
return true;
}
return false;
}
@ override
public String toString()
return name;
}
class B {
String name;
B(String name) {this.name = name;}
@ override
public boolean equals(Object obj) {
if (obj instanceof B) {
if (this.name == ((B) obj).name)
return true;
}
return false;
}
@ override
public int hashCode()
return name.hashCode();
@ override
public String toString()
return name;
}
public class ...
public static void main(String[] args) {
HashMap<Integer, String> hm1 = new HashMap<>();
hm1.put(1, "데이터1");
hm1.put(1, "데이터2");
hm1.put(2, "데이터3");
// -> 1 = 데이터2, 2 = 데이터3
HashMap<A, String> hm2 = new HashMap<>();
hm2.put(new A("첫 번째"), "데이터1");
hm2.put(new A("첫 번째"), "데이터2");
hm2.put(new A("두 번째"), "데이터3");
// -> 첫 번째 = 데이터2, 두 번째 = 데이터3, 첫 번째 = 데이터1
HashMap<B, String> hm3 = new HashMap<>();
hm3.put(new B("첫 번째"), "데이터1");
hm3.put(new B("첫 번째"), "데이터2");
hm3.put(new B("두 번째"), "데이터3");
// -> 첫 번째 = 데이터2, 두 번째 = 데이터3
}
}