Comments
Description
Transcript
プリミティブ型(基本データ型)
■ プリミティブ型(基本データ型) ◆ プリミティブ型(基本データ型) 浮動小数点の数値範囲が正負対称でないのは,べき乗表示にバイアスがかかっている のと 0 以外すべて最上位 bit が 1 と決まっているので最上位を省略しているためであ 分類 型 る。 ビット数 数値の範囲 【ポイント】外部データを扱うときは,long 型と double 型を推奨する。int 型や float 型は桁数が少なすぎて世の中にある普通のデータには不適切である。内部の繰り返し 符号付き整数 byte 8 -27~+27-1(-128~+127) 符号付き整数 short 16 -215~+215-1(-32768~+32767) 型にする必要はない。 符号付き整数 int 32 -231~+231-1(-2147483648~+2147483647,10 桁) いまどき,コンピュータのリソースや計算速度を気づかう必要はまったくない。 63 63 符号付き整数 long 64 -2 ~2 -1(19 桁) 浮動小数点 float 32 仮数部 223,指数部 28(±3.40E+38~±1.40E-45) 浮動小数点 double 64 符号なし整数 char 16 論理値/真偽値 boolean 1 回数や配列数などは,ディフォルトの int 型で十分であり,わざわざ byte 型や short 仮数部 252,指数部 211(±4.94E-324~±1.79E+308) ◆ ユニコード\u0000~\uFFFF(0~65535) ◆ true / false 1文字を扱う。 例 ◆ 論理値/真偽値/ブールリテラル boolean 型は,真偽を表す。すなわち,「true」「false」のみ。 整数リテラル 10 進法: そのまま表記 8 進法: 数値の先頭に 0 を付ける 16 進法: 数値の先頭に 0X または,0x を付ける 文字リテラル ‘c’ //整数 99 と等しい ‘\c3042’ //‘あ’と等しい 正の 16 ビット内の数値は全て char 型に代入できる。 【注意】文字列をあつかう String クラスはラッパークラスではない。つまり,文字 列はプリミティブ型(基本データ型)ではない。ちなみに,文字列リテラルはダブル 整数は,デフォルトで int 型。long 型には数値の後に,L または l を付ける。 16 進法では負数に「-」は付けない。-1 がフルビットになり,0xff(8bit),0xffff (16bit),0xffffffff(32bit),0xffffffffffffffff(64bit)となる。 16 進法の負数の表記法は,10 進法の負数に,bit 数に対応して,28,216,232,264 を 加えてから 16 進法に変換する。16 進法では,負数は最上位 bit が 1 であり,正数は コート「”」で囲む。 ◆ 識別子の名前の付け方 Java で指定されているキーワードは識別子に使えない。 リテラル値(true,false,null)も使用できない。 先頭は文字もしくは,「_」か「$」は使用できる。数字は先頭には使えない。 最上位 bit が 0 である。 例 -1 ◆ 16bit の場合 → 65536 - 1 = 65535 → -32768 → 32767 → 0xffff 65536 - 32768 = 32768 → プリミティブ型(基本データ型)のサンプルプログラム 明示的な型変換(キャスト)と暗黙の型変換の例 0x1000 暗黙の型変換は小さな入れ物から大きな入れ物へ変換するときに可。 0x7fff 【注意】ドラッグして eclipse のソースに貼り付ければコンパイル可。Java のソース ◆ 浮動小数点リテラル 浮動小数点は,デフォルトで double 型。float 型には数値の後に,F または f を付け る。 のファイル名は,main メソッドのあるクラスの「クラス名.java」とする。Java を起 動すると,次のメソッドからはしる。 public static void main(String[] args){} サンプルプログラムには,メソッドは main だけしかない。 01 class TestPrimitiveType{ public static void main(String[] args){ 02 03 //整数 04 byte b = 127; 05 byte bb = -128; 06 short s = 32767; 07 short ss = -32768; 08 int i = 2147483647; 09 int ii = -2147483648; 10 long l = 127L; 11 byte ll = (byte)127L; //この数字を超えるとエラー //この数字を超えるとエラー System.out.println('\uff1d');//= 39 System.out.println((char)0xff1d);//=,明示的な型変換 40 //char 型の負数 41 char c3 = (char) -53182 ;//明示的な型変換(キャスト) //この数字を超えるとエラー 43 // 44 //変数の識別子」 49 51 double d = 123.456; //ディフォルトは double 型 52 15 System.out.println(d); //123.456 53 16 double d2 = 123.456e+12; 17 System.out.println(d2); //1.23456E14 18 float f = 123; 19 float f2 = 123.456F ; 20 // 22 23 24 //エラー,65535 よりも大きいため int bc = 4; // int %c = 8; // int 6d = 4; //エラー,記号は $ _ だけ可 int d6 = 6; //エラー,先頭に数字は不可 int e$_3333 = 9 ; 50 //浮動小数点 = 12354 = \u3042 int $a = 3; 48 //明示的な型変換(キャスト) 14 21 char c4 = 65536 ; 46 47 65536-53182 System.out.println(c3); //あ 42 45 12 13 38 // int true = 9; //エラー,true false null は不可 int False = 9; //大文字は区別される } 54 } // float 型←int 型暗黙の型変換 ■ ラッパークラスとは //左辺右辺とも float 型 Java では,メソッドの操作の対象はオブジェクト(インスタンス)である。プリミテ //暗黙の型変換は小さな入れ物から大きな入れ物へ ィブ型(基本データ型)に対応するオブジェクトを生成するのがラッパークラスであ float f3 = 123.456; り,このインスタンス化することをラップするといい,インスタンス化されたものを //float 型←double 型暗黙の型変換不可 float f3 = (float)123.456;//明示的な型変換(キャスト) ラッパーオブジェクトという。これによって,プリミティブ型(基本データ型)の値 System.out.println(f3); //123.456 をオブジェクトと同様に操作できるようになる。 //ブール boolean b11 = true; 25 ラッパークラスは String クラスと合わせて,プリミティブ型(基本データ型)をい boolean b12 = false ; 26 ろいろ操作する仕組みを提供している。print メソッドなどはプリミティブ型(基本 27 // boolean b3 = 1; //エラー,int 型不可 データ型)を扱っているように見えるが,実は,自動的に toString がプリミティブ 28 // boolean b4 = "true" ; //エラー,文字列不可 型(基本データ型)を文字列(String オブジェクト)に変換しているのである。 29 //文字 30 char c 31 System.out.println(c); = 'c'; 32 System.out.println('\u0063');//c 以下,見やすくするために,プリミティブ型(基本データ型)の値を(boolean,cahr 33 char c1 = '\u3042'; も含めて)「数値」といい,String オブジェクトの値を「文字列」という。 34 System.out.println(c1); //あ 35 char c2 = 0xff1d; 36 System.out.println(c2); //= 37 System.out.println((char)65309);//=,明示的な型変換 ラッパーオブジェクトは不変性(final)であり,設定した値は変更できない。 //c //char 型は単に符号なし 16bit 整数 ◆ ラッパークラスの種類とコンストラクタ Short f2 = new Short(100); //short←int 暗黙の型変換不可 Byte byte / String(例外スロー) short Short short / String(例外スロー) int Integer int / String(例外スロー) 27 // Integer h2 = new Integer(100L); //int←long 暗黙の型変換不可 long Long long / String 28 // Integer h3 = new Integer(1.23); //int←double 暗黙の型変換不可 24 Integer g = new Integer(100); 25 Integer h = new Integer("123"); //文字列可 26 System.out.println(h); 29 Long i = new Long(123) ; 30 Long j = new Long(123L); //123 //long←int 暗黙の型変換可 float Float float / double / String double Double double / String(例外スロー) 31 Long k = new Long('c') ; char Character Char / (String 不可) 32 System.out.println(k); //99 boolean / String 33 Long k2 = new Long('\uFF43'); //long←char 暗黙の型変換可 Boolean ラッパークラスのコンストラクタのサンプルプログラム class TestWrapperConstructor{ public static void main(String[] args){ boolean a = true; 03 04 Boolean b = new Boolean(a); 05 if(b){ //boolean←Boolean unboxing 自動変換 System.out.println(b); 06 //true //unboxing によりラッパーオブジェクトを print できる 07 08 } 09 Character c = new Character('c');//Character←char autoboxing 10 System.out.println(c); 11 Character c2 = new Character(c);//文字リテラルと認識する //c 12 System.out.println(c2); 13 //Character のみコンストラクタ(char),他は引数に String 可 // //c Character c3 = new Character("c");//Character のみ文字列不可 15 byte d = 125; 16 Byte e = new Byte(d); //byte←int 暗黙の型変換可 Byte e2 = new Byte("125"); //文字列可 Byte e22 = new Byte(125); //byte←int 暗黙の型変換不可 // Byte e4 = new Byte("128"); Byte e3 = new Byte((byte)125); //明示的な型変換 19 //文字列可,例外スロー //long←char 暗黙の型変換可 34 System.out.println(k2); //65347 35 Float l = new Float(1); //float←int 暗黙の型変換 36 Float m = new Float(1L); //float←long 暗黙の型変換 37 //Float のみコンストラクタ(float, double, String) 38 Float n = new Float(1.23D); 39 System.out.println(n); 40 Float n2 = new Float(123.456e+12); 41 System.out.println(n2); 42 Float n3 = new Float(123.456789012e+12); 43 System.out.println(n3); 44 Float n4 = new Float(123.456e+78); //1.23 //1.23456E14 //1.23456788E14 45 System.out.println(n4); 46 Double o = new Double(1.23f); //double←float 暗黙の型変換可 47 Double p = new Double('c'); 48 Double q = new 49 // //Infinity //double←char 暗黙の型変換可 Double("111.1111"); Double r = new Double("tanaka");//例外スロー 50 //ラッパーオブジェクトに変換可能な文字列でなくてはならない 51 //実行時,java.lang.NumberFormatException 52 Double s = new 53 System.out.println(s); } 54 // 17 20 // byte 02 18 23 コンストラクタ引数 ドラッグして eclipse のソースに貼り付ければコンパイル可。 14 Short f = new Short((short)100);//明示的な型変換 ラッパークラス 例外:NumberFormatException:数値でない,整数でない,範囲を超えた 01 //実行時;java.lang.NumberFormatException 22 プリミティブ型 boolean ◆ 21 55 } Double(123.456e+78); //1.23456E80 ◆ ラッパーメソッドのサンプルプログラム ドラッグして eclipse のソースに貼り付ければコンパイル可。 01 class TestWrapperMethod{ public static void main(String[] args){ 02 03 //数値(プリミティブ型)と文字列(String オブジェクト)のプリント 04 //引数が数値のときは自動的に toSring()を呼ぶ 05 System.out.println(123); //123 06 System.out.println("123"); //123 07 System.out.println(123.456); //123.456 08 System.out.println("123.456"); //123.456 09 System.out.println(1.23e+12); //1.23E12 10 System.out.println("1.23e+12"); //1.23e+12 11 System.out.println(true); //true 12 System.out.println("true"); //true 13 System.out.println('c'); //c 14 System.out.println("c"); //c 15 System.out.println("--------"); 16 //数値←ラッパーオブジェクト←文字列 Integer obj11 = Integer.valueOf("123");//引数は数値も可 17 18 // Integer obj11 = new Integer("123"); //これも可,引数は数値も可 19 int num11 = obj11.intValue(); 20 System.out.println(obj11); //123 21 System.out.println(num11); //123 22 int num22 = Integer.valueOf("456").intValue();//1行にまとめる 23 System.out.println(num22); 24 System.out.println(Integer.valueOf("456"));//もっとまとめる? 25 26 27 28 //456 //数値←文字列 int num33 = Integer.parseInt("789");//引数は数値不可 System.out.println(num33); //789 //文字列←数値 29 String str44 = String.valueOf(123);//引数は文字列も可 30 System.out.println(str44); 31 String str55 = Integer.toString(456); 32 System.out.println(str55); 33 34 //123 //456 System.out.println("========"); //valueOf() (ラッパーオブジェクト←文字列,数値) 35 //ラッパークラス.valueOf(文字列/数値) 36 Integer i = Integer.valueOf("11111"); //引数は文字列可 37 System.out.println(i);//11111 38 Integer ia = Integer.valueOf(11111); //引数は数値も可 76 39 System.out.println(ia);//11111 77 40 Long l = Long.valueOf("010101" ,2); //第1引数は数値不可 78 //ラッパークラス.toxxxxString(数値) 41 System.out.println(l); 79 System.out.println(Integer.toBinaryString(256)); 42 Float f = new Float("1.11f"); //引数は数値も可 80 System.out.println(Integer.toOctalString(256)) ; 43 System.out.println(f); 81 System.out.println(Long.toHexString(80)); 44 Boolean b = Boolean.valueOf("true"); //引数は true も可 82 45 System.out.println(b);//true 83 46 Character c = Character.valueOf('c'); //引数は数値のみ 84 //ラッパーオブジェクト.toString() 47 System.out.println(c);//c 85 //ラッパークラス.toString(数値) //1.11 System.out.println("\\\\\\\\"); //toString Character c1 = Character.valueOf("c"); //エラー,文字列不可 86 Boolean bbb = new Boolean(true); 49 Double humei = new Double(123.456e+78); 87 System.out.println(bbb.toString());//true 50 System.out.println(String.valueOf(humei)); //1.23456E80 88 System.out.println(bbb); 51 System.out.println(humei); 89 //オーバーロードされた toString()メソッド 52 System.out.println("********"); 90 //基本型を String 型で返す 91 System.out.println(Boolean.toString(true));//true 48 53 // //21 System.out.println("++++++++"); //toHexString,toxxxString //1.23456E80 //intValue,xxxxValue //true 54 //ラッパーオブジェクト.intValue() 92 System.out.println(true); 55 Double d = new Double("123.4"); //小数点のディフォルトは double 93 //引数を 2 つ持つ toString()メソッド 56 byte b1 = d.byteValue(); //ラッパーオブジェクトと xx は不一致可 94 //Integer と Long にしかない。 57 System.out.println(b1) ; 95 //第二引数の基数で値を返す //123 58 Integer i1 = new Integer(123); 96 59 byte b2 = i1.byteValue(); //ラッパーオブジェクトと xx は不一致可 97 60 System.out.println(b2) ; 98 Integer i2 61 62 // = Integer.valueOf("111"); byte b3 = i2.intValue(); //byte←int の暗黙の型変換は不可 System.out.println("////////"); 63 64 //123 //parseInt,parsexxxx 65 //ラッパークラス.parsexxxx(文字列) 66 byte aa = Byte.parseByte("123"); 67 System.out.println(aa + 68 // 3); //126 byte bb = Integer.parseInt("23"); //byte←int 暗黙の型変換不可 69 short cc = Short.parseShort("0011111" , 2); 70 System.out.println(cc); 71 double dd = Float.parseFloat("1.23F"); //double←float 可 72 System.out.println(dd); 73 boolean ddd = Boolean.parseBoolean("true"); 74 System.out.println(ddd);//true 75 // //31 //1.2300000190734863 char ccc = Character.parseCharacter("c"); //存在しない //true System.out.println(Integer.toString(256 , 2)); //100000000 } }