gi_dor

[Java] CH9 java.lang패키지와 클래스 본문

First/Java

[Java] CH9 java.lang패키지와 클래스

기돌 2023. 4. 8. 18:11
728x90

1. Object클래스

모든클래스의 최고 조상이기 때문에 Object클래스의 멤버들은 모든 클래스에서 바로 사용이 가능하다
Object클래스는 멤버변수는 없고 오직 11개의 메서드만 가지고있다.

// 대표 메서드

protected Object clone() 	// 객체 자신의 복사본을 반환
public boolean equals(Object obj)	// 객체 자신과 객체 obj가 같은 객체인지 알려줌
public Class getClass()		// 객체 자신의 클래스 정보를 담고있는 Class 인스턴스
public String toString()	// 객체 자신의 정보를 문자열로 

protected void finalize()	// 객체가 소멸될때 가비지컬렉터에의해 자동적으로 호출
public int hahCode() 	// 객체 자신의 해시코드를 반환
public void notify()	//  객체 자신을 사용하려고 기다리는 쓰레드를 하나만 깨운다
public void notifyAll()	// 객체 자신을 사용하려고 기다리는 쓰레드를 모두 깨운다

// 13장 쓰레드
public void wait()	// 
public void wait( long timeout)
public void wait( long timeout , int nanos )

 


2. Object클래스의 메서드 - equals()

매개변수로 객체의 참조변수를 받아서 비교하여 boolean 값으로 알려줌

public boolean equals (Object obj) {
	return (this == obj );		// Object클래스의 equals()는 주소를 비교함
    }
    // 서로 다른 두객체는 항상주소가 다르다

 

package weekend;

public class day230408_02_ch9_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Value v1 = new Value(5);
		Value v2 = new Value(5);
		
		if(v1.equals(v2))
			System.out.println("v1 , v2는 같음");
		else	
			System.out.println("v1 , v2는 다름");
	}

}
class Value {
	int value ;
	Value (int value){ // 생성자
		this.value = value;
	}
	
	// Object의 equals()를 오버라이딩해서 주소가 아닌 value를 비교
	
	public boolean equals(Object obj) {
		if(!(obj instanceof Value) ) {
			return true;
		}
		
		Value v = (Value)obj; 
		return this.value == v.value;
		// return this==obj;  // 주소비교 , 서로다른 객체는 항상 false
		
	}
}

3. equals()의 오버라이딩

인스턴스변수iv의 값을 비교하도록 equalse()를 오버라이딩 해야함

package weekend;
class Person{
	long id;	// 주민번호
	public boolean equals (Object obj) {
		if( obj instanceof Person) {
			return id == ((Person)obj).id;
		}else {
			return false;
		}
	}
	
	Person (long id ){
		this.id = id;
 	}
	
}

public class day230408_03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p1 = new Person(9401200000000L);
		Person p2 = new Person(9401200000000L);
		
		if(p1.equals(p2) ) {
			System.out.println("p1,p2는 같다");
		}else {
			System.out.println("p1,p2는 다르다");
		}
			
		
	}

}

4. hashCode() 

객체의 해시코드를 반환하는 메서드 ( 정수값, 해싱 알고리즘 ->11장 컬렉션프레임웍)

Object 클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환함

  • equals() 를 오버라이딩하면 hashCode()도 오버라이딩 한다
  • equals() 결과가 true인 두객체의 해시코드는 같아야 하기때문
String str1 = new String("abc");
String str2 = new String("abc");

System.out.println(str1.equals(str2));	// true
System.out.println(str1.hashCode() );	// 96354
System.out.println(str2.hashCode() );	//96354

System.indetityHashCode(Object obj)는 Object클래스의 hashCode()와 동일

System.out.println(System.identityHashCode(str1));	// 3526198
System.out.println(System.identityHashCode(str2));	// 7699183

 5. toString () , toString 오버라이딩

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

public String toString() {	// Object 클래스의 toString
	return getClass().getNAme()+"@"+Integer.toHExString(hashCode() );
    	// 설계도 객체 . 클래스 이름 . 위치. 16진수로 문자열로 바꿔서 . 객체주소로 반환
    }
package weekend;

import java.util.*;

class Card1 {
	String kind;
	int number;
	
	Card1(){
		this("SPADE",1);
	}
	
	Card1(String kind , int number){
		this.kind = kind;
		this.number = number;
	}

	
	// Object 클래스 toString() 오버라이딩
	public String toString() {
		return "Kind : "+kind+ " , number : "+number;
	}
}

public class day230408_05 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 예제 9-4 toString()
		
		Card1 c1 = new Card1();
		Card1 c2 = new Card1("HEART",7);
		
		System.out.println(c1.equals(c2));
		System.out.println(c1.toString());
		System.out.println(c2.toString());
		
	}

}

String 클래스

  • String클래스 = 데이터(char[ ] ) + 메서드 (문자열 관련)
  • 내용을 변경할수 없는 불변 (immutable)클래스 

String 인스턴스가 갖고있는 문자열은 읽어 올수있고 , 변경 할수는 없다 , 불변 클래스 (immutablenot change
ex) ' + ' 연산자를 이용해서 문자열을 결합하는 경우 문자열이 바뀌는것이 아니라
       새로운 문자열이 담긴 String 인스턴스가 생성되는것

String a ="a";
String b = "b";

a = a+b;

 

문자열 간의 결합 , 추출 등 문자열을 다루는 작업이 많이 필요할 경우 String클래스 대신 StringBuffer클래스를 사용

 


문자열의(String) 비교

  • 문자열 리터럴을 지정하는 방법 // "abc"
  • String 클래스의 생성자를 사용해서 만드는 방법  // String str = new String("abc");
String str1 = "abc";	// 문자열 리터럴"abc"의 주소가 str1에 저장됨
String str2 = "abc";	// 문자열 리터럴 "abc"의 주소가 str2에 저장됨

String str3 = new String("abc");	// 새로운 String 인스턴스 생성
String str4 = new String("abc");	// 새로운 Strin g인스턴스 생성



str1 == str2 ?  true
str1.equals(str2) ? true

str3 == str4 ? false
str3.equals(str4) ? true

String 클래스의 생성자를 사용할 경우 new 연산자에 의해 메모리 할당이 이루어져서 
매번 새로운 String인스턴스가 생성됨 

 

package weekend;

public class day230408_07 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//기초 예제 9-6 문자열의 비교
		String str1 = "abc";
		String str2 = "abc";
		System.out.println("String str1 = \"abc\";" );
		System.out.println("String str2 = \"abc\";" );
		
		System.out.println("str1 == str2 ? " + (str1==str2));
		System.out.println("str1.equals(str2) ? "+ str1.equals(str2));
		System.out.println();
		
		String str3 = new String("abc");
		String str4 = new String("abc");
	
		System.out.println("String str3 = new String(\"abc\");");
		System.out.println("String str4 = new String(\"abc\");");
	
		
		System.out.println("str3 == str4 ? "+ (str3 == str4));
		System.out.println("str3.equals(str4) ? " + str3.equals(str4));
	}

}

빈 문자열 ( " " empty String)

내용이 없는 문자열 크기가0인 chat형 배열을 저장하는 문자열

크기가 0 인 배열을 생성하는 것은 어느 타입이나 가능

String str = "";	// str을 빈문자열로 초기화

char[] chArr = new char[0];  	// 길이가 0인char 배열
int [] iArr = {} ;	// 길이가 0 인 int 배열

문자(char) 와 문자열 (String)의 초기화

String s = "";	// 빈문자열로 초기화
char c = ' ';	// 공백으로 초기화

// 하나의 "" 빈 문자열을 str1,str2,str3이 공유
String str1 = "";
String str2 = "";
String str3 = "";

// 빈문자열을 3개나 만들어야함 - > 메모리 낭비~
String str4 = new String("");
String str5 = new String("");
String str6 = new String("");

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

String (char []  value)	// 주어진 문자(value)를 갖는 String인스턴스 생성
	char[] c = { 'H','e','l','l','o' };
	String s = new String(c);   // s = "Hello"

String (StringBuffer buf)	// StringBuffer 인스턴스가 갖고있는 문자열과 같은 내용의 String인스턴스 생성

char charAt(int index) 	// 지정된 위치(index)에 있는 문자를 알려준다 (0부터 시작)
	String s = "Hello";
    String n = "012345";
    char c = s.charAt(1); 	// c = 'e';
    char c2 = n.charAt(1);	// c2 = '1';
    
int compareTo(String str)	// 문자열(str)과 사전순서로 비교한다   
	int i = "aaa".compareTo("aaa"); 	// i = 0;  같으면 0
    int i2 = "aaa".compareTo("bbb");	// i2 = -1; 왼쪽이 작으면 -1
    int i3 = "bbb"compareTo("aaa");		// i3 = 1; 오른쪽이 작으면 1
    
 String concat(String str)	// 문자열 뒤에 덧붙인다
 	String s = "Hello";
    String s2 = s.concat(" world");	// s2 = Hello world
    
boolean contains(CharSequence) // 지정된 문자열이 포함되었는지
	String s = "abcdefg";
    boolean b = s.contains("bc");	// b = true
 
bollean endsWith(String suffix)	// 지전된 문자열로 끝나는지 검사
	String file = "Hello txt			// b = true
    boolean b = file.endsWith("txt");	// b2= true
    									
boolean equals(Object o) 	// 문자열 비교 
	String s ="Hello";
    boolean b = s.equals("Hello");		// b = true
    boolean b2 = s.equals("hello");		// b2 = false
    
boolean equalsIgnoreCase(String str)	// 문자열과 String인스턴스의 대소문자 구분없이 비교
	String s ="Hello";
    boolean b = s.equalsIgnoreCase("HELLO");		// b = true
    boolean b2 = s.equalsIgnoreCase("heLLo");		// b2 = true
    
int indexOf(int ch)	// 문자를 주고 문자열에서 몇번째에 있는지 못찾으면 -1 로 반환
	 String s = "Hello";
     int id1 = s.indexOf('o');	// id1 = 4
     int id2 = s.indexOf('k');	// id2 = -1
     
int indexOf(int ch , int pos) // int pos 검색시작위치 
	 String s = "Hello";
     int id1 = s.indexOf('e',0);	// id1 = 1 
     int id2 = s.indexOf('e',2);	// id2 = -1 
 
int indexOf(String str)	// 주어진 문자열이 존재하는지 확인하여 위치 알려줌
	String s = "ABCDEFG";					// index 는 0 부터시작
    int id = s.indexOf("CD");	// id = 2
 
int lastIndex(int ch)	// 지정된 문자를 오른쪽끝부터 찾음 
	String s = "java.lang.Object";		// java.lang.Object	
    int id1 = s.lastIndexOf('.');	// 뒤에서부터 앞으로 찾음	  // id1 = 9
    int id2 = s.indexOf('.');	// 앞에서부터 찾음				// id2 = 4
    
int lastIndexOf(String str)	// 지정된 문자열을 문자열 끝에서부터 찾음  
	String s = "java.lang.Object";		// java.lang.Object	
    int id1 = s.lastIndexOf("java");	// id1 = 10
    int id2 = s.indexOf("java");		// id2 = 0
    
int length()	// 문자열 길이를 알려줌    
	String s = "Hello";
    int length = s.length();		// length = 5
    
String substring(int vbegin)
String substring(int begin , int end)// 시작위치부터 begin 끝위치 end범위에 포함된 문자열을 얻음
 // begin <= x < end
 	String s = "java.lang.Object";
    String c = s.substring (10);	// c = Object ,  begin ~ 끝까지
    String p = s.substring(5,9); 	// p = lang   , begin ~ 8 까지
  
String toLowerCase()	// 모든 문자열을 소문자로 변환하여 반환
	String s = "Hello";
    String s1 = s.toLowerCase(); 	// s1 = "hello"
    
String toUpperCase()	//  모든 문자열을 대문자로 변환하여 반환
	String s = "Hello";
    String s1 = s.toUpperCase(); 	// s1 = "HELLO"
    
String trim()	// 문자열 왼쪽끝 , 오른쪽 끝 공백을 없애고 결과를 반환
	String s = "    Hello world    ";
    String s1 = s.trim();		// s1 = "Hello world"
    
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(int i )
static String valueOf(long l )
static String valueOf(float f)
static String valueOf(double b)
static String valueOf(Object o)

// 지정된 값을 문자열로 변환하여 반환 , 참조변수일 경우 toString() 호출함

String b = String.valueOf(true)	// b "true"
String c = String.valueOf('a')	// c = "a"
String i = String.valueOf(100 )	// i = "100
String l = String.valueOf(100L)	// l = "100"
String f = String.valueOf(10f)	// f = "10.0"
String d = String.valueOf(10.0)	// d = "10.0"

StringJoiner , 문자열과 기본형 변환

join()은 여러 문자열 사이에 구분자를 넣어서 결합한다

String animals = "dog,cat,bear";
String[] arr = animals.split(",");	// 문자열 ','을 구분자로 나눠서 배열에 저장
String str = String.join("-", arr);	// 배열의 문자열을 '-' 로 구분해서 결합
System.out.println(str);	// dog-cat-bear

 

문자열과 기본형간의 변환

  • 숫자를 문자열로 바꾸기
int i = 100;	// 숫자 + ""
String str1 = i + "";	// 100을 "100"으로 변환
String str2 = String .valueOf(i);
  •  문자열을 숫자로 바꾸는방법
int i = Integer.parseInt("100");	// "100"을 100 으로
int i2 = Integer.valueOf("100");	
Integer i2 = Integer.valueOf("100");

StringBuffer 클래스 - 문자열을 저장 & 다루기 위한 클래스

String 처럼 문자형 배열 (char [] )을 내부적으로 가지고있음
그러나 String과(불변-변경불가) 다르게 내용을 변경할수 있다 (가변 - mutable)

 

StringBuffer의 생성자

  • 배열의 길이는 변경불가 , 공간이 부족하다면 새로운 배열을 생성해야함
  • StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크리고 생성해야함

 

StringBuffer의 변경

  • StringBuffer는 String과 다르게 내용 변경이 가능함
StringBuffer sb = new StringBuffer("abc");
sb.append("123");

  • append() 는 지정된 내용을 StringBuffer()에 추가후 , StringBuffer의 참조를 반환
StringBuffer sb2 = sb.append("zz");	
System.out.println(sb);		// abc123zz  sb의 내용뒤에 zz를 추가
System.out.println(sb2);	// abc123zz
StringBuffer sb = new StringBuffer("abc");
sb.append("123");
sb.append("zz");




StringBuffer sb = new StringBuffer("abc");
sb.append("123").append("zz");

 

StringBuffer의 비교 

  • StringBuffer는 equals() 가 오버라이딩 안되있음 (주소 비교)
StringBuffer sb = new StringBuffer("abc");
StingBuffer sb2 = new StringBuffer("abc");

System.out.println(sb==sb2);	// false
System.out.printlnk(sb.equals(sb2) );	// false

 

  • String으로 변환 후에 equalse() 로 비교 해야함
  •  
String s = sb.toString();	// sb를 String으로 변환
String s2 = sb2.toString();

System.out.println(s.equalse(s2) ); 	// true

StringBuffer의 생성자와 메서드

StringBuffer()	// 16문자를 담을수있는 버퍼를가진 StringBuffer객체 생성

StringBuffer(int length)	// 지정된 개수의 문자를 담을수있는 객체 생성

StringBuffer(String str)	// 지정된 문자열 str을 갖는 객체 생성
	StringBuffer sb = new StringBuffer("Oh ha yo my night");
    sb = "Oh ha yo my night"
    
StringBuffer append(boolean b)	// 매개변수로 입력된 값을 문자열로 변환해서
StringBuffer append(char c)		// StringBuffer 객체가 저장하고있는 문자열뒤에 덧붙임
StringBuffer append(char[] str)
StringBuffer append(double d)
StringBuffer append(float f)
StringBuffer append(int i)
StringBuffer append(long l)
StringBuffer append(Object obj)
StringBuffer append(String str)
	StringBuffer sb = new StringBuffer("abc");
    StringBuffer sb 2 = sb.append(true);
    sb.append('d').append(10.0f);
    StringBuffer sb3 = sb.append("ABC").append(123);
    	// sb = "abctrued10.0ABC123"
        // sb2 = "abctrued10.0ABC123"
		// sb3 = "abctrued10.0ABC123"

int capacity()	// StringBuffer 인스턴스의 버퍼크기를 알려줌
				// length는 버퍼에담긴 문자열에 길이
	StringBuffer sb = new StringBuffer(100);	
    sb.append("abcd");
    int buffersize = sb.capacity()
    int Stringsize = sb.length
     	// buffersize = 100
        // Stringsize = 4 (버퍼에 담긴 문자열이 abcd 4개)

char charAt(int index)	//지정된 위치 (index) 에 있는 문자 반환
	StringBuffer sb = new StringBuffer("abc");
    char c = sb.charAt(2);
    	// c = 'c'
        
StringBuffer delete(int start , int end)	// 시작 위치 부터 끝사이에있는문자 제거
											// 끝위치 문자는 제외
   StringBuffer sb = new StringBuffer ("0123456");
   StringBuffer sb2 = sb.delete(3,6); // 3 <= x <6  삭제
   	// sb = 0123456
   	// sb2 = 0126			// 문자 n개 제거

StringBuffer deleteCharAt(int index)	// 지정된 위치의 문자를 제거
	StringBuffer sb = new StringBuffer("0123456");
    sb.deleteCharAt(3);
    	// sb = "012456"		// 문자 1개 제거
        
StringBuffer insert(int pos,boolean b)
StringBuffer insert(intpos, char c)
StringBuffer insert(int pos, char[] str)
StringBuffer insert(int pos, double d)
StringBuffer insert(int pos,float f)
StringBuffer insert(int pos, int i )
StringBuffer insert(int pos, long l)
StringBuffer insert(int pos, Object obj)
StringBuffer insert(int pos , String str)
// 두번째 매개변수로 받은 값을 문자열로 변환하여 지정된 위치(pos)에 추가한다 pos는 0부터 시작

StringBuffer sb = new SringBuffer("0123456);
sb.insert(4,'.');
	// sb = 01234.56

int length()	// StringBuffer의 인스턴스에 저장되어있는 문자열의 길이를 반환
	StringBuffer sb = new StringBuffer ("0123456");
    int length = sb.length();
    	// length = 7
        
StringBuffer replace(int start , int end , String str)
	// 지정된 범위 (start ~ end)의 문자들을 주어진 문자열로 바꿈
    // end 위치 문자는 범위에 포함안됨 
    // start <= x < end
  StringBuffer sb = new StringBuffer("0123456");
  sb.replace(3,6,"AB");
  	// sb = 012AB6   , 345가 AB가됨
   
StringBuffer reverse()
	// StringBuffer 인스터턴스에 저장되어 있는 문자열의 순서를 거꾸로 나열
    StringBuffer sb = new StringBuffer("01456789");
    sb.reverse();
    // sb = 6543210 
    
void setCharAt(int index, char ch)
	// 지정된 문자를 주어진 문자ch로 바꿈
    StringBuffer sv= new StringBuffer("0123456");
    sb.setCharAr(5,'o');
    // sv = 01234o6

void setLength(int newLength)
	// 지정된 길이로 문자열의 길이를 변경 , 빈공간은 null
    StringBuffer sb = new StringBuffer("0123456");
    sb.setLength(5);
    
    String sb2 = new StringBuffer("0123456");
    sb2.setLength(10);
    String str = sb2.toString().trim();
    // sb = "01234"
    // sb2 = "0123456    "
    // str = "0123456"	// trim() 양끝 빈공간 제거 해줌 

String substring(int start)
String substring(int start,int end)
	// 지정된 범위내의 문자열을 String으로 뽑아서 반환 from ~ to 
    // 시작위치 지정하면 시작위치부터 문자열 끝까지 뽑아서 반환
    StringBuffer sb = new StringBuffer("012345");
    String str1 = sb.substring(3);	// 3 부터 끝까지
    String str2 = sb.substring(3,5);	// 3 <= x < 5
    // str1 = 3456 , str2 = 34

 


StringBuilder

  • StringBuffer는 동기화 되어있음 , 멀티쓰레드에 안전
  • StringBuilder는 동기화 x
  • 멀리 쓰레드 프로그램이 아닌경우 동기화는 불필요한 성능저하 

 


Math클래스 

 

  • 수학관련 static 메서드 집합
public static final double E = 2.7182818284590452354
public static final double PI = 3.14159265358979323846;
  • round()의 원하는 소수점 아래 세번째 자리에서 반올림하기
// 1 . 원하는 값에 100을 곱한다
90.7552 * 100  => 9075.52
// 2. 위의 결과에 Math.round() 사용
Math.round(9075.52)  => 9076
// 3. 위의 결과를 다시 100.0으로 나눔
9076 / 100.0 => 90.76   (double)
9076 / 100 => 90  (int)

 

Math의 메서드

 

static double   abs (double a)
static float 	abs (float f)
static int 		abs (int f )
static long 	abs (long f)
	// 주어진 값의 절대값을 반환
    // 양수 -> 양수 , 음수 -> 양수 ,
// int i = Math.abs(-10);    i = 10
// double d = Math.abs (-10.0); 	d = 10.0

static double ceil(double a)
// 주어진 값 올림
	double d = Math.ceil(10.1);   d = 11
    double d2 = Math.ceil(-10.1);	d2 = -10
    double d3 = Math.ceil(10.00015);	d3 = 11.0

static double floor (double a )
// 주어진 값을 버림
	double d = Math.floor(10.8);	d = 10.0
    double d2 = Math.floor(-10.8);	d2 = -11.0

static double max (double a , double b) 
static in max ( int a, int b)
//  두개 값 비교해서 큰거 반환
	int i = Math.max(0,-1);		// i = 0
    double d = Math.max(9.5 , 9.500001);	// d = 9.500001
    
static double min( double a, double b)
static int min ( int a, int b)
// 두개의 값 비교해서 작은쪽 반환
	int i = Math.min(0,-1);		// i = -1
    double d = Math.min(9.5 , 9.500001);	// d = 9.5

static double random()
// 0.0 ~ 1.0 범위 내의 임의의 값 반환 
// 0.0 <= x < 1.0
 int i = (int)(Math.random()*10)+1	// 1 <= x < 11
 
static double rint( double a )
// 주어진 double 값과 가장 가까운 정수값을 double 형태로 반환해줌 
// 1.5 2.5 3.5 같은 값은 짝수를 반환함
 	double d = Math.rint(1.2);	// 1.0
    double d1 = Math.rint(2.6);	// 3.0
    double d2 = Math.rint(3.5);	// 4.0
    
static long round (double a)
// 소수점 첫째 자리에서 반올림한 정수값을 반환
	long l = Math.round(2.6);	// l = 3
    double d = 90.7552;
    double d2 = Math.random(d*100)/ 100.0	// 90.76

래퍼 클래스 (wrrapper)

기본형 값을 감싸는 클래스 
▶ 8개의 기본형을 객체로 다룰 때 쓰는 클래스

  • boolean -> Boolean
  • char -> Charcater
  • byte -> Byte
  • short -> Short
  • int -> Integer
  • long -> Long
  • float -> Float
  • double -> Double
✔ char , int 제외 하고 나머지는 대문자 사용 
래퍼클래스 들은 모두 equals()가 오버라이딩 되어있어서 주소값이 아닌 객체가 가지고있는 값을 비교함

toString() 도 오버라이딩 되어있어서 객체가 가지고있는 값을 문자열로 변환하여 반환한다.

MAX_VALUE, MIN_VALUE , SIZE , BYTES , TYPE 등의 static 상수를 공통적으로 가지고있다 

Number 클래스


문자열을 숫자로 변환하기

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

int i  = new Integer("100").intValue();	
int i2 = Integer.parseInt("100");		//  주 사용
Integer i3 = Integer.calueOf("100");

//  Integer -> int   intValue()
// 	Long -> long  	longValue()

 

// 문자열 -> 래퍼클래스
Byte b = Byte.valueOf("100");
Integer i = Integer.valueOf("100");

// 문자열 -> 기본형
byte b = Byte.parseByte("100");
int i = Integer.parseInt("100");

 


오토박싱 & 언박싱
컴파일러가 자동으로 기본형과 참조형 간의 계산이 가능하도록 변환하는 코드를 넣어준다

int   →  Integer  오토박싱  
int  ←  Integer  언박싱 

▪ 기존에는 기본형과 참조형간의 연산이 불가능했었음

int i = 5;
Integer iObj = new Integer(7);

int sum = i + iobj;	// 에러  기본형 참조형간의 덧셈 불가능 (기존버전)



int i = 5;
Integer iObj = new Integer(7);

int sum = i + iObj.intValue();  // 기본형으로 형변환

▪ 기본형의 값을 객체로 자동변환하는것을 오토박싱, 그반대는 언박싱

ArrayList<Integer> list = new ArrayList<Integer>();

list.add(10);	
// 오토박싱
// 10 -> list.add(new Integer(10));

int value = list.get(10);	// 언박싱

728x90

'First > Java' 카테고리의 다른 글

[Java] CH 11 컬렉션 프레임웍  (0) 2023.06.09
[Java] Comparator - compare(o1,o2) , Comparable - compareTo(o) , HashSet,TreeSet  (0) 2023.04.05
[Java] CH8 예외처리  (0) 2023.04.02
[Java] 6장 QUIZ  (0) 2023.03.21
[Java] CH7 객체지향 개념  (0) 2023.03.20