Wrapper class

5829 ワード

toString()は、通常、ハッシュ・コード値を必要に応じて上書きによって値を返すように変換する.
Javaのすべてのクラスはobjectクラスを継承し、objectクラスにはtoStringメソッドがあります.
toString()はprintメソッドの実行時に自動的に呼び出すことを約束します.

int

package ex04.wrapper.interger00;

public class IntWrapperMain {
	public static void main(String[] args) {
//		기본자료형 -> 클래스화하려고 wrapper클래스를 이용한다.
		int num = 7;		//stack에 저장됨 
		IntWrapper intInst = new IntWrapper(7);
		/*
		System.out.println(Object obj);
		obj.toString();
		toString()은 "패키지+클래스+해시코드" 가 default구현
		toString()은 종종 객체내의 값을 바로 부여주기 위해
		Overriding을 하는 경우가 많다
		*/
		System.out.println(num);		
		System.out.println(intInst);			// 7 출력 
	}
}
package ex04.wrapper.interger00;
/*
자바의 기본 자료형 타입(Primitive Type)       -> Class
byte   1 byte          					-> Byte
char   2 byte		
short  2 byte		  					-> Short
int    4 byte		  					-> Integer
long   8 byte		  					-> Long
float  4 byte		  					-> Float
double 8 byte		  					-> Double
*/

public class IntWrapper {
	private int num;		//객체의 필드 -> heap에 저장 
	public IntWrapper(int num) {
		this.num = num;
	}
	@Override
	public String toString() {
		return ""+num;
	}	
}
パッケージクラスを使用するには、上記の手順は必要ありません.
package ex04.wrapper.interger01;

public class UseWrapperClass {

	public static void main(String[] args) {
		Integer intInst = new Integer(100);
		System.out.println(intInst); //100 출력 
	
	}
}

Boxing/ Unboxing

package ex04.wrapper.boxing02;

public class BoxingUnboxing {
	public static void main(String[] args) {
		// Boxing
		Integer iValue = new Integer(10);
		Double dValue = new Double(3.14);
		
		System.out.println(iValue);
		System.out.println(dValue);
		
		// Unboxing
		iValue = new Integer(iValue.intValue() + 10);		//primitive type으로 변환
		dValue = new Double(dValue.doubleValue() + 1.2);
		
		System.out.println(iValue);
		System.out.println(dValue);
	}
}
jdkバージョンのアップグレードに伴い、ジェネレータを使用することなく変換
package ex04.wrapper.boxing02;

public class BoxingUnboxing {
	public static void main(String[] args) {
		// Boxing
		Integer iValue = new Integer(10);
		Double dValue = new Double(3.14);
		
		System.out.println(iValue);
		System.out.println(dValue);
		
		// Unboxing 아래 모두 가능 
		iValue = iValue.intValue() + 10;		
		dValue = dValue.doubleValue() + 1.2;
		
 //       iValue = iValue + 10;     지금은 이렇게 자유롭게 상호변환 가능해짐.
 //       dValue = dValue + 1.2;

		System.out.println(iValue);
		System.out.println(dValue);
	}
}
boxing:スタック内の基本データ型をグループ化してスタックに入れる
unboxing:お尻の子供たちを分解してスタックに連れて行きました
package ex04.wrapper.boxing02;
/*
Wrapper클래스는 처음에 jdk존재하지 않다가
Generic 컬렉션에서의 기본자료형 사용을 위한
문법으로 탄생
*/
public class AutoBoxing {
	public static void main(String[] args) {
		//(Auto)Boxing
		Integer iValue = 10; //Integer iValue = new Integer(10); 
		Double dValue = 3.14; // Double dValue = new Double(3.14);
		
		//(Auto)UnBoxing
		int num0 = iValue;	// int num0 = iValue.intValue();
		double num1 = dValue; // double num1 = dValue.doubleValue();
		
		System.out.println(iValue);		//10 출력 
		System.out.println(dValue);		//3.14
		System.out.println(num0);		//10	
		System.out.println(num1);		//3.14 
	}
}
package ex04.wrapper.boxing02;
/*
Boxing : Stack -> Heap : Primitive Type => Object
UnBoxing : Heap -> Stack : Object => Primitive Type
중간에 JVM이 관여되어서 Wrapper객체와 PrimitiveType 연산을 많이 쓰면
그냥 PrimitiveType을 사용한 연산보다 성능이 떨어진다
*/
public class AutoBoxingUnBoxing {
	public static void main(String[] args) {
		Integer num0 = 10;	//Interger num0 = new Integer(10);
		Integer num1 = 20;	//Interger num1 = new Integer(20);
		
		num0++;		//num0 = new Integer(num0.intValue()+1);
		num1 += 3;  //num1 = new Integer(num1.intValue()+3);
		int result = num0 + num1; //num0.intValue() + num1.intValue();
		
		System.out.println(num0);
		System.out.println(num1);
		System.out.println(result);
	}
}

BigInteger


範囲外は文字列型としてのみ表現できます.
大きな数字を表すのに使います.
package ex04.wrapper.bigInteger06;

import java.math.BigInteger;

public class BigIntegerEx {
	public static void main(String[] args) {
		System.out.println(Long.MAX_VALUE);  //약 900경
		System.out.println(Long.MIN_VALUE);  //약 -900경
		
//		상수(literal) = 숫자 = PrimitiveType
		BigInteger bigValue0 = new BigInteger("100000000000000000000000");
		BigInteger bigValue1 = new BigInteger("-99999999999999999999999");
		
		BigInteger result= bigValue0.add(bigValue1);
		System.out.println(result);
		result= bigValue0.multiply(bigValue1);
		System.out.println(result);
	}
}

BigDecimal

package ex04.wrapper.bigDecimal07;

/*
C, C++, Java, C#
실수 0.0 ~ 1.0 사이의 실수의 개수는? 무한대
실수 : 무한대의 값
정수 : 정확히 범위를 가진 값
메모리 : 유한한 공간
float : 4byte 표현
double : 8byte 표현
유한한 공간에 무한대 범위를 수를 표현해야 한다 => 불가능
수학자들은 공식에 의해 소수점 몇째자리까지만 보장하는 근사값으로 저장
*/

public class DoubleError {
	public static void main(String[] args) {
		double d0 = 1.6;
		double d1 = 0.1;
		
		System.out.println(d0+d1);  //딱 떨어지는 값이 나오지 x 
		System.out.println(d0*d1);
	}
}
だからBigDecimalを使っています
package ex04.wrapper.bigDecimal08;

import java.math.BigDecimal;

public class BigDecimalEx {
	public static void main(String[] args) {
//		literal 값이 실수라 이미 전달할 때부터 오차가 발생
//		그래서 결과가 오차
//		BigDecimal e0 = new BigDecimal(1.6);
//		BigDecimal e1 = new BigDecimal(0.1);
		
		// 문자열로 전달해야 한다
		BigDecimal e0 = new BigDecimal("1.6");
		BigDecimal e1 = new BigDecimal("0.1");
		
		System.out.println(e0.add(e1));
		System.out.println(e0.multiply(e1));
	}
}