[자바의정석]Java - java.lang패키지와 유용한클래스 #008

박정현·2022년 1월 17일
0

Java

목록 보기
8/16
post-thumbnail

hashCode(),equals(),toString()

Object클래스

  • 모든 클래스의 최고 조상 오직 11개의 메서드만을 가지고 있다.
  • protected Object clone(), equals(Object obj), protected void finalize(),
    getClass(), hashCode(), toString(), notify(), notifyAll(), wait(), wait(long timeout), wait(long timeout,int nanos)

equsals(Object obj)

  • 객체 자신(this)과 주어진 객체(obj)를 비교한다. 같으면 true 다르면 false
  • Object클래스의 equals()는 객체의 주소를 비교! (참조변수 값을 비교)
  • 객체 주소로 비교안하고 iv 값으로 비교하려면 오버라이딩 해야한다!

hashCode()

  • 객체의 지문 , 객체마다 다른값을 반환한다
  • 객체의 해시코드(hash code)를 반환하는 메서드
  • Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환
  • equals()를 오버라이딩하면,hashCode()도 오버라이딩해야 한다.
  • equals()의 결과가 true인 두객체의 해시코드는 같아야 하기 때문이다
  • System.identityHashCode(Object obj)는 Object클래스의 hashCode()와 동일 <- 객체마다 값이 다르다

toString(),hashCode()의 오버라이딩

  • toString() : 객체를 문자열(String)으로 변환하기 위한 메서드

  • toString()을 오버라이딩 안하고 객체 출력 한 결과

  • hashCode(), equals(), toString() 실습


String 클래스

  • String클래스 = 데이터(char[]) + 메서드(문자열관련)
  • 내용을 변경할 수 없는 불변(immutable)클래스 계속 새로운 객체가 생성됨
  • 덧셈 연산자를 이용한 문자열 결합은 성능이 떨어지기 때문에 StringBuffer를 사용

문자열의 비교

  • new 연산자를 이용해서 만들면 새로운 객체를 생성한다
  • String str1 = "abc" , String str1 = "abc" 로 문자열 리터럴로 생성한다면
    같은 주소를 가르킨다

빈 문자열("",empty string)

  • 내용이 없는 문자열. 크기가 0인 char형 배열 저장하는 문자열
    -숫자를 문자로 바꿀때 사용
    -배열 초기화 할때 null 보다 유용함
  • 크기가 0 인 배열을 생성하는 것은 어느 타입이나 가능하다
    -사용방법
    String str = ""; //str을 빈 문자열로 초기화
    char[] charr = new char[0] //길이가 0인 char 배열
    int[] iArr = {}; //길이가 0 인 int 배열

String 생성자

String 클래스의 생성자와 메서드

  • String(String s)
    주어진 문자열(s)를 갖는 String 인스턴스를 생성
 String s = new String("Hello");
  • String(char[] value)
    주어진 문자열을 갖는 String 인스턴스롤 생성한다
    반대되는 메서드 toCharArray() 가 있다
 char[] c = {'H','e','l','l','o'};
 String s = new string(c);
  • String(StringBuffer buf)
    StringBuffer인스턴스가 갖고 있는 문자열과 같은 내용의 String 인스턴스를 생성한다
StringBuffer sb = new StringBuffer("Hello");

String s = new String(sb);
  • char charAt(int index)
    지정된 위치에 있는 문자를 알려준다
String s = "Hello";
char c = s.charAt(1) // c = 'e'
  • int compareTo(String str)
    문자열(str)과 사전 순서로 비교한다. 같으면 0을 사전순으로 이전이면 음수
    이후면 양수를 반환한다
int i = "aaa".compareTo("aaa"); //i = 0
int i2 = "aaa".compareTo("bbb"); //i = -1
int i3 = "bbb".compareTo("aaa"); //i = 1
  • String concat(String str)
    문자열간의 결합
String s = "Hello";
String s2 = s.concat(" World") //s2 = " Hello World"
  • boolean contains(CharSequence s)
    지정된 문자열(s)가 포함되었는지 검사한다
    CharSequence는 인터페이스이다 (인터페이스 장점 - 서로 관계없는 클래스들의 관계를 맺어줄수있다 CharBuffer,Segmnet,String,StringBuffer,StringBuilder 다들 공통 조상이없지만 같은 인터페이스를 구현했다 그래서 위같은 클래스들의 타입을 다 사용할수있다)
  • boolean endWith(String suffix)
    지정된 문자열로 끝나는지 검사한다.
String file = "Hello.txt";
boolean b = file.endWith("txt");
  • boolean equals(Object obj)
    매개변수로 받은 문자열과 String 인스턴스의 문자열을 비교한다
    obj가 String이 아니거나 문자열이 다르면 false 를 반환

  • boolean equalsIgnoreCase(String str)
    문자열과 String인스턴스의 문자열을 대소문자 구분없이 비교한다

  • int indexOf(int ch)
    주어진 문자가 문자열에 존재하는지 확인 하여 위치를 알려준다
    못찾으면 -1 반환해준다

String s = "Hello";
ind idx1 = s.indexOf('o'); //idx1 = 4
  • int indexOf(int ch, int pos)
    주어진 문자가 문제열에 존재하는지 pos의 위치부터 탐색한다

  • int indexOf(String str)
    주어진 문자열이 존재하는지 탐색해준다

  • int lastIndexOf(int ch)
    지정된 문자 또는 문자코드를 문자열의 뒤부터 탐색해서 위치를 알려준다

  • int lastIndexOf (String str)
    지정된 문자열을 뒤에서 부터 찾아서 위치를 알려준다

  • int length()
    문자열의 길이를 알려준다

  • String[] split(String regex)
    문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환한다
    regex(정규식)

String animals = "dog,cat,bear";
String[] arr = animals.split(",") ;
// arr[0] = "dog" , arr[1] = "cat", arr[2] = "bear"
  • String[] split(String regex, int limit)
    문자열을 지정된 분리자로 나눈다 , 문자열 전체를 지정된 수로 자른다

  • boolean startsWit(String prefix)
    주어진 문자열로 시작하는지 검사한다

  • String substring(int begin),begin 부터 끝에 까지 자름
    String substring(int beggin , int end)

  • String toLowerCase()
    String 인스턴스에 저장되어있는 모든 문자열을 소문자로 변환하여 반환한다

  • String toUpperCase()
    String 인스턴스에 저장되어있는 모든 문자열을 대문자로 변환하여 반환한다

  • String trim()
    문자열의 왼족 끝과 오른쪽 끝에 있는 공백을 없앤 결과를 반환한다
    ,중간에 있는 공백은 제거되지 않는다.

  • static String valueOf()
    지정된 기본형 값들을 문자열로 변환하여 반환한다.
    빈 문자열을 더해도 가능하지만 valueOf()가 성능은 더좋다

StringJoiner,문자열과 기본형 변환

join()과 StringJoiner

  • join()은 여러 문자열 사이에 구분자를 넣어서 결합한다.
String str = String.join("-",문자열배열)
//dog-cat-bear

문자열과 기본형 간의 변환

  • 숫자를 문자열로 바꾸는 방법
int i = 100; 
String str1 = i + ""; //문자열을 더함
String str2 = String.valueOf(i);//valueOf()사용
  • 문자열을 숫자로 바꾸는 방법
int i = Interger.parseInt("100"); //"100"을 100으로 바꿔줌
// double 이면 parseDouble 처럼 각 클래스마다있음

int i2 = Interger.valueOf("100") //"100"을 100으로 바꿔좀
//앞 쪽 클래스만 바꾸고 뒤를 valueOf 로 통일 이방법이 더편함
//근데 반환 타입이 원래는 Integer 이다
//valueOf는 언래 참조형을 반환하지만 오토박싱을 통해서 참조형을 기본형으로 바꿔준다

StirngBuffer 클래스

StringBuffer

  • String 처럼 문자형 배열(char[])을 내부적으로 가지고있다
  • 그러나 String 과 달리 내용을 변경할 수 있다.

StringBuffer의 생성자

  • 배열은 길이 변경불가. 공간이 부족하면 새로운 배열 생성해야된다
    길이가 5로만드는데 그이상 추가하려면 공간부족으로 인해서
    새로운 배열을 생성하고,
    내용을 복사해서 담아주고,
    참조를 변경해줘야한다
  • StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해야된다
  • 버커 크기 지정하지 않으면 자동으로 크기는 16이된다
  • 내용 추가,삭제,삽입이 가능하다 StringBuffer타입으로 반환함

StringBuffer의 비교

  • StringBuffer는 equals()가 오버라이딩되어있지 않다(주소로 비교한다)

  • 내용이같아도 객체가 다르면 다르게 나옴

  • StringBuffer을 String으로 변환후에 비교해줘야한다

StringBuffer의 생성자와 메서드

StringBuffer()

  • 16문자를 담을수있는 버퍼를 가진 StringBuffer인스턴스를 생성

StringBuffer(int length)

  • 지정된 개수의 문자를 담을 수 있는 버퍼를 가진 인스턴스를 생성

StringBuffer(String str)

  • 지정된 문자열 값(str)을 갖는 인스턴스를 생성한다 16문자크기로 생성

**StringBuffer append(타입 a)

  • 매개변수로 입력된 값을 문자열로 변환하여 인스턴스가 저장하고있는
    문자열 뒤에 덧붙인다

**StringBuffer delete(int start, int end)

  • 시작부터 끝위치 사이에있는 문자를 제거한다

**StringBuffer delete(int index)

  • 지정된 위치의 문자를 제거한다

**StringBuffer insert(int pos, 타입 a)

  • 지정된 위치(pos)에 매개변수로 받은 값을 문자열로 변환하여 추가한다

int capacity()

  • StringBuffer인스턴스의 버퍼크기를 알려준다.
    length()는 버퍼에 담긴 문자열의 길이를 알려준다

char charAt(ind index)

  • 지정된 위치에 있는 문자를 반환한다

StringBuffer replace(int start, int end, String str)

  • 지정된 범위의 문자들을 주어진 문자열로 바꿔준다
  • "012345" "34"만 "AB"로 바꿀때 사용한다

StringBuffer reverse()

  • 문자열의 앞뒤를 바꿔준다 뒤집혀서 출력됨
  • 0,6 1,5 2,4 이런식으로 서로 자리를바꿈

void setCharAt(int index,char ch)

  • 지정된 위치의 문자를 주어진 문자로 바꾼다

**void setLength(int newLength)

  • 지정된 길이로 문자열의 길이를 변경한다,
    길이를 늘리는경우 나머지 빈공간을 널문자 로 채운다

String toString()

  • StringBuffer인스턴스의 문자열을 String로 반환

String substring(int start),String substring(int start,int end)

  • 지정된 범위의 문자를 String로 반환해준다

StringBuilder,Math 클래스

StringBuffer

  • StringBuffer는 동기화되어 있다. 멀티 쓰레드에 안전
  • 싱글 쓰레드 : 한번에 1개 작업
  • 멀티 쓰레드 : 한번에 n개 작업
  • 멀티 쓰레드 프로그램이 아닌경우, 동기화는 불필요한 성능저하
    이럴땐 StringBuilder를 사용하면 성능 향상 메소드는 동일

Math클래스

  • 수학관련 static메서드의 집합

static double abs(정수,실수타입 a)

  • 주어진 값의 절대값을 반환한다

static double ceil(double a)

  • 주어진 값을 올림하여 반환한다

static double floor(double a)

  • 주어진 값을 버림하여 반환

static 타입 max (반환타입 a, 반환타입 b)

  • a,b중에 큰걸 반환해준다

static 타입 min (반환타입 a, 반환타입 b)

  • a,b중 작은걸 반환해준다

static double random()

  • 0.0~1.0범위의 임의의 double값을 반환한다

static double rint(double a)

  • x.5일경우 짝수로 반환해준다

static long round()

  • 그냥 반올림해준다

래퍼(wrapper),Number클래스

wrapper 클래스

  • 8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스
  • 기본형의 앞을 대문자로 바꿔서 사용한다 int -> Integer
    char -> Character

Number클래스

  • 모든 숫자 래퍼 클래스의 조상
  • Byte,Short,Integer,Long,Float,Double,BigInteger,BigDecimal

오토박싱 & 언박싱,문자열과 숫자변환

문자열을 숫자로 변환하기

  • 문자열을 숫자로 변환하는 다양한 방법
  • int i = new Integer("100").intValue();
  • int i2 = Integer.parseInt("100");
  • Integer,int(둘다가능) i3 = Integer.valueOf("100");

n진법의 문자열을 숫자로 변환하는 방법

  • int i4 = Integer.parseInt("100",n)//n에 몇진법인지 입력

오토박싱 & 언박싱

  • 컴파일러가 자동으로 코드를 변경해준다
  • int -> Integer / 기본형을 객체로(오토박싱)
  • Integer -> int / 객체를 기본형으로 (언박싱)
int i = 5;
Integer iObj = new Integer(7);

int sum = i+iObj;
//컴파일러에서 int sum = i+iObj.intValue(); 이렇게 자동변환
  • 기본형을 참조형으로 형변환 가능
Integer intg = (Integer)i;
//이걸 Interger intg = Integer.valueOf(i) 이런식으로 변경해줌
profile
빠샤

0개의 댓글

관련 채용 정보