티스토리 뷰
Object 클래스
-모든 클래스의 최고 조상. 오직 11개의 메서드만을 가지고 있다.
-notify() , wait() 등은 쓰레드와 관련된 메서드

equals(Object obj)
-객체 자신(this) 과 주어진 객체(obj)를 비교한다. 같으면 true 다르면 false.
-Object클래스의 equlas()는 객체의 주소를 비교(참조변수 값 비교)
-인스턴스 변수(iv)의값을 비교하도록 equals()를 오버라이딩해야 함.

public class Ex9_1 {
public static void main(String[] args) {
Value v1= new Value(10);
Value v2= new Value(10);
if (v1.equals(v2)){
System.out.println("v1과v2는 같습니다.");
}else{
System.out.println("v1 과 v2는 다릅니다.");
}
}
}
class Value {
int value;
public Value(int value) {
this.value = value;
}
//Object의 equals () 오버라이딩해서 주소비교가 아닌 인스턴스 값을 비교
public boolean equals(Object obj) {
// return this== obj; //주소비교. 서로 다른 객체는 항상 거짓
//참조 변수의 형변환 전에는 반드시 instanceof로 확인해야함.
Value v= (Value) obj;
return this.value== v.value;
}
}
hashCode()
-객체의 해시코드(hash code)를 반환하는 메서드
-Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환
-equals()를 오버라이딩하면 , hashcode()도 오버라이딩해야한다.
-equals()의 결과가 true인 두 객체의 해시코드는 같아야 하기 떄문
toString(), toString()의 오버라이딩
-toString():객체를 문자열(String)으로 변환하기 위한 메서드
객체=='iv 집합' iv값을 문자열로 변환 한다는것과 같음
class Card {
String kind;
int number;
Card() {
this("SPADE",1);
}
Card(String kind, int number){
this.kind=kind;
this.number=number;
}
public String toString(){
return "kind:"+kind+",number"+number;
}
//equals()를 오버라이딩하면 hashCode()도 오버라이딩 해야한다.
public int hashCode() {
return Objects.hash(kind,number);
}
public boolean equals(Object obj) {
if(!(obj instanceof Card))
return false;
Card c= (Card) obj;
return this.kind.equals(c.kind) && this. number==c.number;
}
public class Ex9_4 {
public static void main(String[] args) {
Card c1= new Card("SPADE",7);
Card c2= new Card("HEART",2);
System.out.println(c1);
System.out.println(c2);
System.out.println(c1.equals(c2);
System.out.println(c1.hashCode());
System.out.println(c2.hashCode());
}
}

-equals(),hashCode()오버라이딩해서 같은 값일때 같은 주소를 반환

-값이 다를때 다른 주소로 반환
String 클래스
-데이터(char[] + 메서드(문자열 관련)
-내용을 변경할 수없는 불변(immutable) 클래스

-덧셈 연산자(+) 를 이용한 문자열 결합은 성능이 떨어짐
-문자열의 결합이나 변경이 잦다면 , 내용을 변경가능한 StringBuffer를 사용
문자열의 비교
String str="abc"; 와 String str= new String("abc"); 비교

String str="abc"; 경우 여러 참조변수가 주소를 공유해서 값을 나타내줌(내용변경 불가라 여러 참조변수가 공유해도 문제없음)
String str= new String("abc"); 경우 각 항상 새로운 문자열이 만들어짐
문자열의 비교는 ==(주소비교)가 아닌 equals()를 이용해서 비교해야됨
문자열 리터럴
-문자열 리터럴은 프로그램 실행시 자동으로 생성된다.(constant pool에 저장)
-같은 내용의 문자열 리터럴은 하나만 만들어진다.
빈문자열("", empty string)
-내용이 없는 문자열. 크기가 0인 char형 배열을 저장하는 문자열
String str= " ";
-크기가 0인 배열을 생성하는것은 어느 타입이나 가능
char[] chArr= new char[0]; //길이가 0인 char배열
int [] iArr= { }; //길이가 0인 int 배열
-문자(char)와 문자열(String)의 초기화

join() 과 StringJoiner
-join()은 여러 문자열 사이에 구분자를 넣어서 결합한다.
public class Ex9_10 {
public static void main(String[] args) {
int iVal=100;
String strVal=iVal+""; //int를 String으로 변환하는 또 다른 방법
double dVal=200.0;
String strVal2= dVal+"";
double sum= Integer.valueOf("+"+strVal) + Double.valueOf(strVal2);
double sum2=Integer.valueOf(strVal)+ Double.valueOf(strVal2);
System.out.println(String .join("",strVal,"+",strVal2,"=")+sum);//문자열을 숫자로 바꾸는 방법
System.out.println(strVal+"+"+strVal2+"="+sum2);
}
}
StringBuffer클래스
-String처럼 문자형 배열(char[])을 내부적으로 가지고있다.

-그러나 String과 달리 내용을 변경할수있다.

-배열은 길이 변경불가, 버퍼(배열)의 크기를 충분히 지정해주는 것이 좋다.
(버퍼가 작으면 성능 저하 - 작업 중에 더 큰 배열의 생성이 필요)
StringBuffer의 변경
-String 과 달리 내용변경이 가능하다.
-append()는 지정된 내용을 StringBuffer에 추가 후 StringBuffer의 참조를 반환
-StringBuffer는 equals()가 오버라이딩 되어 있지 않다 (주소비교)
Strng으로 변환 후에 equals()로 비교해야한다.
StringBuffer sb= new StringBuffer("abc");
StringBuffer sb2= new StringBuffer("abc");
System.out.println(sb==sb2); //false
System.out.println(sb.equals(sb2)); //false
String s= sb.toString(); //sb를 String 변환
String s2= sb2.toString();
System.out.println(s.equals(s2)); //true
StringBuilder
- StringBuffer는 성능 저하 그래서 , 쓰레드의 동기화 뺀 StringBuilder 가 성능 향상 멀티 쓰레드 프로그램이 아닌 경우, 동기화는 불필요한 성능저하 이럴땐 StringBuffer 대신 StringBuilder를 사용하면 성능향상
String Buffer sb;
sb= new StringBuffer();
sb.append("abc");
StringBuilder sb;
sb= new StringBuilder();
sb.append("abc");
-StringBuffer도 충분히 성능이 좋기 때문에 성능향상이 반드시 필요한 경우를 제외하고는 기존에 작성한 코드에서 StringBuffer를 StringBuilder로 굳이 바꿀 필요없음
래퍼(Wrapper) 클래스
-8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스
public class Ex9_14 {
public static void main(String[] args) {
Integer i = new Integer(100);
Integer i1 = new Integer(100);
System.out.println("i==i1 ?"+(i==i1));
System.out.println("i.equals(i1) ?"+i.equals(i1));
System.out.println("i.compareTo(i1) ?"+i.compareTo(i1)); //값이 같으면 0 , 작으면 ㅣ 양수 크면 :음수
System.out.println("i.toString()="+i.toString());
System.out.println("MAX_VALUE="+Integer.MAX_VALUE);
System.out.println("MIN_VALUE="+Integer.MIN_VALUE);
System.out.println("SIZE="+Integer.SIZE);
System.out.println("BYTES="+Integer.BYTES);
System.out.println("TYPE="+Integer.TYPE);
}
}

문자열을 숫자로 변환하기
int i= new Integer("100").intValue();
int i2= Integer.parsentInt("100");
Integer i3= Integer.valueOf("100");
n진법의 문자열을 숫자로 변환하는 방법
public class RoundTest {
public static void main(String[] args) {
System.out.println("i="+Integer.parseInt("100"));
System.out.println("i="+Integer.parseInt("100",10)); //위와 동일
System.out.println("i="+Integer.parseInt("100",2)); //2진수
System.out.println("i="+Integer.parseInt("100",16)); //16진수
}
}
오토박싱&언박싱(Auto Boxing & UnBoxing)
-JDK1.5이전에는 기본형과 참조형간의 연산이 불가능
int i=5;
Integer iObj= new Integer(7);
int sum=i+iObj; //에러 기본형과 참조형 간의 덧셈불가(JDK1.5이전)

-컴파일러가 자동으로 Integer->int 로 바꿔줌
-기본형의 값을 객체로 자동변환하는 것을 오토박싱 ,그 반대는 언박싱
import java.util.ArrayList;
import java.util.Arrays;
public class EX9_15 {
public static void main(String[] args) {
ArrayList<Integer> list= new ArrayList<Integer>();
list.add(new Integer(100));
list.add(100); //JDK1.5이전에는 에러
// int i= list.get(0).intValue();//intValue()로 Integer를 int 반환
int i = list.get(0); //오토박싱으로 int 은 컴파일러가 자동으로 바꿔줌
}
}
import java.util.ArrayList;
import java.util.Arrays;
public class EX9_15 {
public static void main(String[] args) {
int i =10;
Integer intg=(Integer) i;
Object obj =(Object) i;
Long lng= 100L;
int i2= intg + 10;
long l= intg+lng;
Integer intg2= new Integer(20);
int i3= (int) intg2;
}
}
출처: 자바의 정석 저자:남궁성
'TIL > JAVA' 카테고리의 다른 글
| Collections Framework(컬렉션 프레임웍) (0) | 2023.01.16 |
|---|---|
| 객체지향(OOP)인터페이스 (0) | 2023.01.12 |
| 예외처리(Exception) (0) | 2023.01.11 |
| 객체지향(OOP)추상클래스(abstract class) (0) | 2023.01.11 |
| 객체지향(OOP)제어자 (0) | 2023.01.11 |
- Total
- Today
- Yesterday
- git 개념 #spring전 git #간단한 개념만
- Spring Boot 공부
- spring #springboot #스프링부트공부 #스프링부트실습 #메타코딩유튜브
- 스프링 # 스프링부트 #서버와클라이언트 # 공부기록
- 개발자취업부트캠프
- 메가바이트스쿨
- 빌드 오류 #java버전오류
- mysql #인텔리제이랑 연결 #다시설치 및 재실행
- JSON
- HTTP #메타코딩
- application.yml 설정
- 내일배움카드
- 국비지원교육
- 국비지원
- MegabyteSchool
- 자료구조
- 패스트캠퍼스
- JSON #json #개발자필수지식
- JSON에 대해서 알아보기
- 자료구조 #CS공부
- 알고리즘 복잡도 #알고리즘 공부 #이것이코딩테스트다 #이코테 #나동빈
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |