Javaラッパークラス
記事の内容はシャンシリコンバレーから選ばれています
パッケージ紹介
Javaの基本データ型はクラスの一種ではなく、メソッドも属性もありませんが、Javaはオブジェクト指向プログラミングです。基本データ型もクラスの一種と見なされる場合、メソッドとクラスの属性はJavaであり、オブジェクト指向プログラミングの概念を完全に反映できます。
この問題を解決するために、Javaはクラスをパッケージ化するためのツールを提供します。
シャンシリコンバレーからの写真
図に示すように、各パッケージングクラスタイプは基本データ型に1つずつ対応しています。booleanとcharのパッケージングクラスを除いて、残りの親クラスはすべてNumberクラスです。基本データ型とパッケージ型は2つの独立したツールであり、相互に変換できます。プログラミングでは、ラッパークラスを使用して基本データ型を置き換え、基本データ型がメソッドを呼び出せないという問題を解決できます。
パッケージングクラスと基本的なデータ型および文字列間の変換
写真は変換関係を要約するために使用できます。
写真はShangシリコンバレーから選択されます
パッケージングクラスと基本データ型間の変換
基本的なデータ型をパッケージングクラスに変換する
メソッドユニットテスト、パッケージング、およびパッケージングラッパークラスを
フォーマットするための基本データ型のテスト変数名= new(初期値);
コードに従って、クラスWrapperTestを作成します
package com.atguigu.java2;
import org.junit.Test;
public class WrapperTest {
@Test
public void test1(){
int num1 = 10;
Integer in1 = new Integer(num1);
System.out.println(in1 );
System.out.println(in1.toString() );
System.out.println(in1 + 1);
System.out.println(in1.toString()+1);
}
}
テスト結果は
10
10
11
101
これら4つの結果の理由を分析します。1つ目はprintlnメソッドによるものです。パラメータリストがオブジェクト参照の場合、toStringメソッドが呼び出されます。ラッパークラスがtoStringメソッドを書き換えるため、出力は10になります。詳細については、Javaオブジェクトクラスメソッド(equalsおよびtoString)を参照してください
。2つ目は、ラッパークラスのtoStringメソッドを直接呼び出すことです。原理は最初のメソッドと同じです。
4つ目は、toStringによって返される結果が整数か文字列型かをテストすることです。文字列型が返さ
れることがわかります。3つ目は原則として4つ目と同じである必要がありますが、Javaの自動ボックス化解除があります。式は最初に変換されます。次に整数型の結果が出力されます。
コンストラクターに文字列を入れることもできます
Integer in2 = new Integer("123");
System.out.println(in2.toString());
System.out.println(in2.toString()+1);
結果は
123
1231
ただし、Integer in2 = new Integer( "123a");に変更された場合、コンパイルは成功しますが、操作はエラーjava.lang.NumberFormatExceptionを報告します。
特に、ブール型の場合
Boolean b1 = new Boolean(true);
Boolean b2 = new Boolean("true");
System.out.println(b1);
System.out.println(b2);
Boolean b3 = new Boolean("true122");
Boolean b4 = new Boolean("truE");
System.out.println(b3);
System.out.println(b4);
運転結果
true
true
false
true
文字列の値がtrueでない場合、出力はエラーではなくfalseを報告し、文字列の値では大文字と小文字が区別されません。
ブール値( "true122")のコンストラクターを分析します。
public Boolean(String s) {
this(parseBoolean(s));
}
parseBooleanをクリックして、ソースコードを表示します
public static boolean parseBoolean(String s) {
return ((s != null) && s.equalsIgnoreCase("true"));
}
equalsIgnoreCaseは大文字と小文字を区別しないことを意味し、大文字と小文字を区別しない結果が「true」でない場合はfalseを返すことがわかります。
WrapperTestのJavaファイルにクラスを書き続けます
class Order{
boolean isMale;
Boolean isFemale;
}
もう一度テストする
Order order = new Order();
System.out.println(order.isMale);
System.out.println(order.isFemale);
試験結果
false
null
ブール値はクラスであり、isFemaleは参照データ型であるため、オブジェクトはまだ作成されていないため、参照データ型の値はnullまたはアドレス値のいずれかです。したがってnullです。
パッケージングクラスを基本データ型に変換します
メソッド:ラッパークラスのxxxValue()メソッドを呼び出します。
コードは次のとおりです。
@Test
public void test2(){
Integer in1 = new Integer(12);
int i1 = in1.intValue();
System.out.println(i1);
}
テスト結果は12です
自動ボックス化と自動ボックス化解除
自動ボックス化と自動ボックス化解除は、JDK5.0以降に追加された新機能です。
自動ボクシングは、基本的なデータ型をパッケージ型、アプリケーションシナリオに変換することです
@Test
public void test3(){
int in1 = 13;
method(in1);
Integer num = 14;
Integer num2 = 15;
System.out.println(num.toString());
System.out.println(num2.toString());
}
public void method(Object obj){
System.out.println(obj);
}
結果は
13
14
15
メソッドメソッドを実行する場合、メソッドの仮パラメータはクラスです。基本データ型を入力できないと言っても過言ではありませんが、自動ボックス化により、要求に応じて基本データ型がパッケージクラスに自動的に変換されます。 。
自動ボックス化解除は、パッケージングクラスを基本的なデータ型に変換することです。
Integer num = 14;
int i1 = num;
System.out.println(i1);
これは自動組み立ておよび開梱プロセスであり、出力結果は14です。
文字列クラスを使用したパッケージングクラスと基本データ型間の変換
自動ロードとアンパックを使用すると、パッケージングクラスと基本的なデータ型を全体として見なすことができます。次に、この全体と文字列の間の変換について学習します。
基本的なデータ型とパッケージングクラスは文字列型に変換されます
方法1:接続操作による変換
int num1 = 20;
String str = num1+ "";
方法2:文字列オーバーロードのvalueOf(Xxx xxx)メソッドを呼び出します。
@Test
public void test4(){
Float f1 = 12.3f;
String str = String.valueOf(f1);
System.out.println(str);
}
文字列型は基本データ型またはパッケージングクラスに変換されます
ラッパークラスでparseXxxメソッド
を呼び出すためのコードは次のとおりです。
@Test
public void test5(){
String str1 = "123";
// Integer in1 = (Integer)str1;
int i = Integer.parseInt(str1);
System.out.println(i);
}
演算の結果は123です。これは、Stringとパッケージングクラス間の変換で、変換された型のメソッド、つまり等号の左側にあるクラスのメソッドを呼び出す必要があることを示しています。
ブール型の場合、等号の右側の文字列データに他の文字を追加すると、変換結果はfalseになります。ブール型でない場合、変換はエラーを報告します。
ps:コメント付きステートメントの場合、強制変換の使用は子と親の関係がある場合にのみ発生する可能性があるため、コンパイラーはエラーを報告します。子と親の関係がない場合、コンパイラはエラーを報告します。
シャンシリコンバレーからの写真