Wrapper class
5829 ワード
toString()は、通常、ハッシュ・コード値を必要に応じて上書きによって値を返すように変換する.
Javaのすべてのクラスはobjectクラスを継承し、objectクラスにはtoStringメソッドがあります.
toString()はprintメソッドの実行時に自動的に呼び出すことを約束します.
unboxing:お尻の子供たちを分解してスタックに連れて行きました
範囲外は文字列型としてのみ表現できます.
大きな数字を表すのに使います.
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));
}
}
Reference
この問題について(Wrapper class), 我々は、より多くの情報をここで見つけました https://velog.io/@jinkyung/Wrapper-classテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol