Java梱包と解体
2680 ワード
どうして箱詰めするの?
Javaには基本データ型があり、基本データ型はクラスの範疇に属していないことはよく知られています.しかし、場合によっては、例えば、汎用設計の場合、汎用はObjectタイプのみであり、例えばリストでは、TはObjectとObjectのサブクラスでなければならない.リストにint値を格納したい場合、リストは合法ではありません.このような問題を解決するために、箱詰めの概念があります.この場合、基本データ型に対応するクラスが必要です.Integerを例に挙げます.
リストにIntegerオブジェクトを格納すると,リストセットにint数値を格納する目的に間接的にヒットする.
どうして箱を分解するの?
解体と梱包は対応しており,基本データ型を操作するために梱包しているが,実際に使用する際に注目しているのは彼の数値である.たとえば、リスト内のデータをソートする必要がある場合、要素ごとに必ずサイズを比較する必要があります.この場合、各Integerオブジェクトが表す数値を取得する必要があります.この取得数値プロセスは、ボックスを取り外すプロセスです.
梱包と自動梱包
いずれの方法でも箱詰めが可能である.すなわち、int値1に対応するIntegerタイプのオブジェクトが見つかった.自動梱包は実はJavaが自動的に梱包プロセスを完了することを祈っています.自動梱包は私たちのコードを簡略化し、コードをより簡潔で直感的にします.
解体と自動解体
知識が多い byte、short、int==自動==梱包の場合、数値が[-128127]の値範囲内であれば、梱包によって新しいオブジェクトが作成されず、メモリに予め作成されたオブジェクトが直接多重化されます.手動で梱包すると、毎回新しいオブジェクトが生成されます.
梱包値がこの範囲内でない場合、異なるオブジェクトが作成されます. boolean、char自動箱詰め多重メモリ内のオブジェクト. float、double、long自動梱包では、毎回異なるオブジェクトが作成されます. パッケージタイプequals比較コンテンツを行う場合、同じタイプでない場合falseを返します.
なぜなら,パッケージタイプのequalsメソッドは,コンテンツを比較する前に同じタイプに属するか否かを先に判断し,Floatのequalsメソッドを例にとるからである.梱包および解体操作は、基本データ型のみに適用され、以下のコードは梱包および解体ではありません.
Javaには基本データ型があり、基本データ型はクラスの範疇に属していないことはよく知られています.しかし、場合によっては、例えば、汎用設計の場合、汎用はObjectタイプのみであり、例えばリストでは、TはObjectとObjectのサブクラスでなければならない.リストにint値を格納したい場合、リストは合法ではありません.このような問題を解決するために、箱詰めの概念があります.この場合、基本データ型に対応するクラスが必要です.Integerを例に挙げます.
class Integer{
int i;
Integer(int i){
this.i = i;
}
int intValue(){
return i;
}
}
リストにIntegerオブジェクトを格納すると,リストセットにint数値を格納する目的に間接的にヒットする.
どうして箱を分解するの?
解体と梱包は対応しており,基本データ型を操作するために梱包しているが,実際に使用する際に注目しているのは彼の数値である.たとえば、リスト内のデータをソートする必要がある場合、要素ごとに必ずサイズを比較する必要があります.この場合、各Integerオブジェクトが表す数値を取得する必要があります.この取得数値プロセスは、ボックスを取り外すプロセスです.
梱包と自動梱包
Integer i1 = new Integer(1);//
Integer i2 = 1;//
いずれの方法でも箱詰めが可能である.すなわち、int値1に対応するIntegerタイプのオブジェクトが見つかった.自動梱包は実はJavaが自動的に梱包プロセスを完了することを祈っています.自動梱包は私たちのコードを簡略化し、コードをより簡潔で直感的にします.
解体と自動解体
Integer i = 1;//
int n = i;//
int m = i.intValue();//
知識が多い
Integer l = new Integer(1);
Integer m = 1;
Integer n = 1;
System.out.println(l == m);//false
System.out.println(m == n);//true
梱包値がこの範囲内でない場合、異なるオブジェクトが作成されます.
Integer m = 200;
Integer n = 200;
System.out.println(m == n);//false
System.out.println(m.equals(n));//true
Boolean b1 = true;
Boolean b2 = true;
Boolean b3 = true;
System.out.println(b1 == b2);//true
System.out.println(b1.equals(b2));//true
System.out.println(b2 == b3);//false
System.out.println(b2.equals(b3));//true
Character c1 = 'A';
Character c2 = 'A';
System.out.println(c1 == c2);//true
System.out.println(c1.equals(c2));//true
Float f1=1.0f;
Float f2=1.0f;
System.out.println(f1 == f2);//false
System.out.println(f1.equals(f2));//true
Float f = 1.0f;
Double d = 1.0;
System.out.println(f.equals(d));//false
なぜなら,パッケージタイプのequalsメソッドは,コンテンツを比較する前に同じタイプに属するか否かを先に判断し,Floatのequalsメソッドを例にとるからである.
public boolean equals(Object obj) {
return (obj instanceof Float)&& (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
}
String s1 = new String("a");
String s2 = "a";
String s3 = s1;
String s4 = s2.toString();