Javaベースタイプソースプロファイルシリーズ--Numberクラス

14621 ワード

ベース(数値)タイプ(byte,short,int,long,float,double)に対応するwrapperクラスを表示すると、クラス宣言が非常に似ていることがわかります.
public final class Double extends Number implements Comparable<Double> {
public final class Integer extends Number implements Comparable<Integer> {

また、wrapperタイプの声明から、次のことがわかります.
  • wrapperクラスはfinal修飾子を有し、継承できないことを示す.
  • wrapperクラスは抽象クラスNumberを継承します.
  • wrapperクラスはComparableインタフェース(2つの同種wrapperクラスのサイズ比較を実現)を実現した.

  • Comparableインタフェースの機能はwrapperクラスにcompareToメソッドを提供するためで、これは何も言うことはありません.しかし、この抽象クラスNumberはいったい何なのか、wrapperクラスにどんな機能を提供しているのか.これがこのブログのポイントです.
    まず、Numberクラスとは何かを調べてみましょう.
    jdk 1.8 apiでは,抽象クラスNumberは数値クラスの親であり,数値クラスの数値をベースタイプ(int,doubleなど)に変換する方法を定義している.
    こちらの数値クラスは、
  • は、数値を表すために使用される.
  • で表されるこの数値は、ベースタイプbyte,double,float,int,long,shortに変換できる.

  • 例を挙げます.
    public class MyInteger {
    
        private int value;
    
    }

    これは、上記の2つの条件を満たす簡単な数値クラスです.
    Numberクラスの定義を簡単に理解した後、Numberクラスがサブクラスにどのような機能を提供しているかを見てみましょう.
    Numberクラスはそのサブクラスにどのような機能を提供していますか?
  • は、基本タイプに対応する数値クラス変換機能(Integer->int)を提供する.

  • 数値クラスを他の基本タイプに変換する能力(Integer->double)を提供し、精度損失、情報損失(ベースタイプのダウンコンバートnarrowing primitive conversionおよびアップコンバートwidening primitive conversionと同様)がある.
    次に、Numberクラスには具体的にどのような方法があるかを見てみましょう.
    public abstract class Number implements java.io.Serializable {
        
        public abstract int intValue();
    
        public abstract long longValue();
    
        public abstract float floatValue();
    
        public abstract double doubleValue();
    
        public byte byteValue() {
            return (byte)intValue();
        }
    
        public short shortValue() {
            return (short)intValue();
        }
    
        private static final long serialVersionUID = -8742448824652078965L;
    }

    抽象メソッド:
    メソッド宣言
    さぎょう
    戻り値
    intValue
    数値クラスに対応するint数値を取得する
    対応するint値を返します
    longValue
    数値クラスに対応するlong数値を取得
    対応するlong値を返します
    floatValue
    数値クラスに対応するfloat数値を取得
    対応するfloat値を返します
    doubleValue
    数値クラスに対応するdouble数値を取得
    対応するdouble値を返します
    実装方法:
    メソッド宣言
    さぎょう
    戻り値
    byteValue
    数値クラスに対応するbyte数値を取得
    対応するbyte値を返し、メソッドintValueの戻り値をbyteタイプ変換する
    shortValue
    数値クラスに対応するshort数値を取得
    対応するshort値を返し、メソッドintValueの戻り値をshortタイプ変換する
    最後に、Numberタイプを継承するすべてのベースタイプの変換を出力するテストを行います.
    テストコード:
    package Primitive;
    
    import org.junit.Test;
    
    public class IntegerTest {
    
        @Test
        public void printConversion() {
            Integer num = new Integer(12);
            System.out.println("intValue(): " + num.intValue());
            System.out.println("longValue(): " + num.longValue());
            System.out.println("floatValue(): " + num.floatValue());
            System.out.println("doubleValue(): " + num.doubleValue());
            System.out.println("byteValue(): " + num.byteValue());
            System.out.println("shortValue(): " + num.shortValue());
        }
    
    }

    結果を返します.
    intValue(): 12
    longValue(): 12
    floatValue(): 12.0
    doubleValue(): 12.0
    byteValue(): 12
    shortValue(): 12
    
    Process finished with exit code 0