1. ?? 틀린게 없는데???
2. 3번 java.sql은 베이스 모듈이 아니지
3. 4번 그냥 클래스 네임이다 재정의 안하면
4. hashCode() -> equals() 해시코드가 다르면 그냥 볼 가치도 없이 다른거, 같으면 리턴값 비교
5.
public String hashCode() {
return getStudentNum();
}
public boolean equals(Object o){
if(this.hashCode() == o.hashCode()){
return true;
}else{
return false;
}
}
6.
public String toString(){
return this.id+": "+this.name;
}
7. 3번 milisTime() 메서드가 없자나
8.
long prevNano = System.nanoTime();
//연산구현부 생략
long exeNano = System.nanoTime() - prevNano;
9.
String str = new String(bytes, "UTF-8");
10.
StringBuilder sb = new StringBuilder();
for(int i=1; i<=100; i++){
sb.append(i);
}
11.
StringBuilder sb = new StringBuilder("아이디,이름,패스워드");
StringTokenizer st = new StringTokenizer(sb.toString(), ",");
while(st.hasMoreTokens){
System.out.println(st.nextToken());
}
12.
이유:
1.WrapperClass는 Mutable한 객체라서 자체 메모리 주소를 가지고 있다. 즉 같은 리터럴을 저장한다고 해서 같은메모리를 가리키는건 아니야.
2. 그런데 hashCode() 함수의 내부 구현은 오버로딩 하기 나름이다. 어떤 필드를 기준으로 생성할 수도 있고 다양하다.
3. 그런데 의문 Wrapper Class는 대체 지가 뭐라고 변수이름에 플리미티브 할당하면 알아서 생성하고 값저장하고, 변수이름만 사용해도 어련히 알아서 Primitive type을 뱉어낼까?
4. 그거에 대한 답을 파고 들어봤다. cached를 사용하여 -127~128이니~ valueOf()니 어쩌고 저쩌고는 핵심이 아니다. 대체 어디서 어떻게 구현했길래 변수 식별자만으로 다른 클래스를 초월하는 기능들을 구현한거지???
5. 파고들어도 찾을 수 없는 시점에서 결국 답은..소스코드로는 autoBoxing과 autoUnBoxing을 구현할 수 없댄다.. 딱봐도 문법이 틀리자나. ->-> 결국 범인은 JVM이었음.... WrapperClass 에게만 특별한 기능을 주고, 이상한 문법을 써도 찰떡같이 소스코드 매서드 호출하는 방식으로 변환을 해준대.. 컴파일러가..
6. 암튼 왜 다르냐 결론: hashCode를 뱉는 로직이 다르다. 특정 영역에서의 hashCode는 리터럴값에 종속적이라 == 때리면 알아서 잘 나왔는데...
7. 특정범위 밖에서의 hashCode는 진짜 서로 다른 인스턴스니까 일반적인 Object 룰을 따라 hashCode가 다르게 뱉어지는거다.
8. Class 타입을 동등비교할때는 == 같은 원시 연산자 사용하지말고, Object.equals(Object obj)를 사용하도록 하자. 이건 찐으로 리터럴 값 같은지 비교한다고...
13. 쉣 왜 반올림만 Long 타입반환이야 햇갈리게. 반올림은 무조건 정수형으로 반환한다..
14. 와씨 4번 nextInt(int n)은 0<= ... <n 임
15.
//오늘 날짜
LocalDateTime now = LocalDateTime.now()
//특정 날짜 올해기준!
LocalDateTime day = LocalDateTime.of(now.getYear(), 12, 31, 0, 0);
int dday = day.getDayOfYear() - now.getDayOfYear();
16.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 E요일 HH시 mm분");
17.
String regExp = "[a-zA-z](\w{8:12})";
boolean isMatch = Pattern.matches(regExp, id);
18.1번 말도 안되는 소리하고 있어. 매소드를 얻을려면 일단 instance.getClass().getDeclaredMethods();
19. 4번 어노테이션에 파라미터 여러개를 넣을땐 반드시 key=value 형태를 취해줘야 알아먹는다.
'Learn > 이것이 자바다' 카테고리의 다른 글
[이것이 자바다] chapter 13 확인문제 (0) | 2024.12.04 |
---|---|
제네릭, 와일드카드 (0) | 2024.12.03 |
자바 라이브러리, base 모듈, 리플렉션, 어노테이션 등 정리 (2) | 2024.12.02 |
[이것이 자바다]chapter14 확인문제 (0) | 2024.11.30 |
멀티 스레드, 메인 스레드, 스레드 상태, 스레드 동기화, 데몬 스레드, 스레드풀 (2) | 2024.11.30 |