型
日本語 | 型 |
英語 | type |
ふりがな | かた |
フリガナ | カタ |
変数を作るときに、その変数に「どんな値を入れられるのか」を示すもの。
データを格納する「変数」は、「型 変数名;」と書くことで作られる(これを「変数を宣言する」という)。
こうして作られた変数は「変数 = 値;」という形で値を格納することができる(これを「変数に代入する」という)。
この「値」は、どんな値でも入れられるわけではなく、変数を作ったときに指定した「型」によって制限される。
たとえば型を「int」にすれば、変数には-2147483648~2147483647の整数値を入れられるが、実数は入れられない。また、型を「byte」にすれば、-128~127の整数値を入れられるが、int型の時のような大きい整数値は入れられない。
このように、変数にどのような値が入れられるのかを決めるのが「型」である。
型そのものにデータを格納することはできない。
たとえば「型 = 値;」のように、型に値を入れることはできない。
型はあくまで変数の「設計図」であり、変数そのものではないからである。
型は、「バケツを作るための金型」だと考えればよい。金型そのものに水は入れられない。金型を元にバケツを作ることで、そのバケツに水を入れることができる。この「バケツ」が「変数」、「水」が「格納する値」、「金型」が「型」である。
型は以下の2種類存在する。
・プリミティブ型
・参照型
プリミティブ型はint型やdouble型、boolean型等のことで、これらの型で宣言された変数は整数値、実数値(浮動小数点)、論理値を格納できる。
参照型は、クラスや配列の「インスタンス」を参照するための型である。インスタンスは参照を通してのみ使用することができ、通常は参照型変数を宣言して参照を入れてから使用する。
詳しくは「型」「プリミティブ型」「参照」「クラス」「インタフェース」「配列」の項目を参照。
変数やリテラル、戻り値は必ず「型」を持っている。
変数は、作られた際の「型」が、その変数の「型」となる。
リテラルは、リテラルによって型が決まる。整数リテラルであればint型、文字列リテラルであればStringクラスの参照型である。詳しくはそれぞれのリテラルの項目を参照。
戻り値は、メソッドの「戻り値の型」がその値の型となる。
変数に格納されている値やリテラル、戻り値を、他の変数にコピーする場合、型が一致している必要がある。
型が異なる場合、その「格納先変数の型」へと変換してからコピーする必要がある。
この変換を「型変換」と言い、その際の操作を「キャスト」と言う。
ただし、コピー元の型とコピー先の型によっては型変換が自動的に行われる場合がある。これを「暗黙的キャスト」という。
またこれらとは別に、プリミティブ型と対応するラッパークラスは「オートボクシング」という機能を使って自動的に変換することができる。
自動的に変換できない場合には、キャストを行ったり指定した型へ変換するメソッドを使用する必要があり、これらを行わないとコンパイルエラーとなる。
このコンパイルエラーを回避するためにも、変数、リテラル、メソッドの戻り値、この3つがどの型なのか、ということを常に意識してプログラムを組むといいだろう。
データを格納する「変数」は、「型 変数名;」と書くことで作られる(これを「変数を宣言する」という)。
こうして作られた変数は「変数 = 値;」という形で値を格納することができる(これを「変数に代入する」という)。
この「値」は、どんな値でも入れられるわけではなく、変数を作ったときに指定した「型」によって制限される。
たとえば型を「int」にすれば、変数には-2147483648~2147483647の整数値を入れられるが、実数は入れられない。また、型を「byte」にすれば、-128~127の整数値を入れられるが、int型の時のような大きい整数値は入れられない。
このように、変数にどのような値が入れられるのかを決めるのが「型」である。
型そのものにデータを格納することはできない。
たとえば「型 = 値;」のように、型に値を入れることはできない。
型はあくまで変数の「設計図」であり、変数そのものではないからである。
型は、「バケツを作るための金型」だと考えればよい。金型そのものに水は入れられない。金型を元にバケツを作ることで、そのバケツに水を入れることができる。この「バケツ」が「変数」、「水」が「格納する値」、「金型」が「型」である。
型は以下の2種類存在する。
・プリミティブ型
・参照型
プリミティブ型はint型やdouble型、boolean型等のことで、これらの型で宣言された変数は整数値、実数値(浮動小数点)、論理値を格納できる。
参照型は、クラスや配列の「インスタンス」を参照するための型である。インスタンスは参照を通してのみ使用することができ、通常は参照型変数を宣言して参照を入れてから使用する。
詳しくは「型」「プリミティブ型」「参照」「クラス」「インタフェース」「配列」の項目を参照。
変数やリテラル、戻り値は必ず「型」を持っている。
変数は、作られた際の「型」が、その変数の「型」となる。
リテラルは、リテラルによって型が決まる。整数リテラルであればint型、文字列リテラルであればStringクラスの参照型である。詳しくはそれぞれのリテラルの項目を参照。
戻り値は、メソッドの「戻り値の型」がその値の型となる。
変数に格納されている値やリテラル、戻り値を、他の変数にコピーする場合、型が一致している必要がある。
型が異なる場合、その「格納先変数の型」へと変換してからコピーする必要がある。
この変換を「型変換」と言い、その際の操作を「キャスト」と言う。
ただし、コピー元の型とコピー先の型によっては型変換が自動的に行われる場合がある。これを「暗黙的キャスト」という。
またこれらとは別に、プリミティブ型と対応するラッパークラスは「オートボクシング」という機能を使って自動的に変換することができる。
自動的に変換できない場合には、キャストを行ったり指定した型へ変換するメソッドを使用する必要があり、これらを行わないとコンパイルエラーとなる。
このコンパイルエラーを回避するためにも、変数、リテラル、メソッドの戻り値、この3つがどの型なのか、ということを常に意識してプログラムを組むといいだろう。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// プリミティブ型のひとつ、int型の変数を宣言します。
int i;
// これで変数iが作られました。
// 変数iはint型を使用して作られたので、int型の範囲の整数値を
// 入れる事ができます。
// たとえば、整数値100を入れることができます。
i = 100;
System.out.println( i );
// 100
// 「int」は型なので、「int」そのものには値を入れられません。
// ※コンパイルエラーの例
// int = 100;
// ※エラーメッセージ
// トークン "int" に構文エラーがあります。Expression が無効です
// ※コンパイルエラーの例ここまで
// 先ほど宣言したiの型は「int型」です。
// このiの中に格納されている値を渡せるのは、
// 同じint型変数になります。
int i2;
i2 = i;
System.out.println( i2 );
// 100
// 型が異なる変数に代入する場合、コピー元の値を
// コピー先の型へ変換してから、コピーされます。
// たとえば、int型からbyte型へは「キャスト」を行って
// 変換する必要があります。
byte bt;
bt = (byte)i;
System.out.println( bt );
// 100
// 「(byte)」がキャストです。
// この明示的キャストを行うことで、変数iに格納されている値が
// byte型へ変換されて、変数chに格納されました。
// 型によっては、この明示的キャストを行わなくても、自動的に
// キャストしてくれる場合もあります。
// たとえば、int型からlong型へは自動的に変換されます。
long l;
l = i;
System.out.println( l );
// 100
// 変数iに格納されている値が自動的にint型からlong型へ
// 変換されました。これを暗黙的キャストと言います。
// いずれの変換も、コピー元である変数iに格納されている値は
// 変化せず、int型のままです。
}
}
public class Sample
{
public static void main( String[] args )
{
// プリミティブ型のひとつ、int型の変数を宣言します。
int i;
// これで変数iが作られました。
// 変数iはint型を使用して作られたので、int型の範囲の整数値を
// 入れる事ができます。
// たとえば、整数値100を入れることができます。
i = 100;
System.out.println( i );
// 100
// 「int」は型なので、「int」そのものには値を入れられません。
// ※コンパイルエラーの例
// int = 100;
// ※エラーメッセージ
// トークン "int" に構文エラーがあります。Expression が無効です
// ※コンパイルエラーの例ここまで
// 先ほど宣言したiの型は「int型」です。
// このiの中に格納されている値を渡せるのは、
// 同じint型変数になります。
int i2;
i2 = i;
System.out.println( i2 );
// 100
// 型が異なる変数に代入する場合、コピー元の値を
// コピー先の型へ変換してから、コピーされます。
// たとえば、int型からbyte型へは「キャスト」を行って
// 変換する必要があります。
byte bt;
bt = (byte)i;
System.out.println( bt );
// 100
// 「(byte)」がキャストです。
// この明示的キャストを行うことで、変数iに格納されている値が
// byte型へ変換されて、変数chに格納されました。
// 型によっては、この明示的キャストを行わなくても、自動的に
// キャストしてくれる場合もあります。
// たとえば、int型からlong型へは自動的に変換されます。
long l;
l = i;
System.out.println( l );
// 100
// 変数iに格納されている値が自動的にint型からlong型へ
// 変換されました。これを暗黙的キャストと言います。
// いずれの変換も、コピー元である変数iに格納されている値は
// 変化せず、int型のままです。
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // プリミティブ型のひとつ、int型の変数を宣言します。 int i; // これで変数iが作られました。 // 変数iはint型を使用して作られたので、int型の範囲の整数値を // 入れる事ができます。 // たとえば、整数値100を入れることができます。 i = 100; System.out.println( i ); // 100 // 「int」は型なので、「int」そのものには値を入れられません。 // ※コンパイルエラーの例 // int = 100; // ※エラーメッセージ // トークン "int" に構文エラーがあります。Expression が無効です // ※コンパイルエラーの例ここまで // 先ほど宣言したiの型は「int型」です。 // このiの中に格納されている値を渡せるのは、 // 同じint型変数になります。 int i2; i2 = i; System.out.println( i2 ); // 100 // 型が異なる変数に代入する場合、コピー元の値を // コピー先の型へ変換してから、コピーされます。 // たとえば、int型からbyte型へは「キャスト」を行って // 変換する必要があります。 byte bt; bt = (byte)i; System.out.println( bt ); // 100 // 「(byte)」がキャストです。 // この明示的キャストを行うことで、変数iに格納されている値が // byte型へ変換されて、変数chに格納されました。 // 型によっては、この明示的キャストを行わなくても、自動的に // キャストしてくれる場合もあります。 // たとえば、int型からlong型へは自動的に変換されます。 long l; l = i; System.out.println( l ); // 100 // 変数iに格納されている値が自動的にint型からlong型へ // 変換されました。これを暗黙的キャストと言います。 // いずれの変換も、コピー元である変数iに格納されている値は // 変化せず、int型のままです。 } }
「みだし」に含まれているページ
「解説」に含まれているページ
- !演算子
- %=演算子
- %演算子
- &&
- &&演算子
- &=演算子
- (
- *=演算子
- *演算子
- ++演算子
- +=演算子
- +演算子
- ,
- --演算子
- -=演算子
- -演算子
- .
- /=演算子
- /演算子
- 16進数
- 2進数
- 8進数
- <<=演算子
- <<演算子
- <T>
- ==演算子
- =演算子
- >>=演算子
- >>>=演算子
- >>>演算子
- >>演算子
- [
- ^=演算子
- ArrayList
- ArrayStoreException
- BigDecimal
- BigInteger
- boolean
- Boolean
- booleanリテラル
- BufferedInputStream
- BufferedWriter
- byte
- Byte
- ByteArrayInputStream
- ByteArrayOutputStream
- C++言語
- case
- char
- Character
- CharArrayReader
- CharArrayWriter
- ClassCastException
- clone
- close
- Comparable
- Comparator
- CREATE TABLE
- C言語
- DataInputStream
- DataOutputStream
- Date
- default
- double
- Double
- equals
- false
- FileInputStream
- FileOutputStream
- FileReader
- final変数
- float
- Float
- for
- forステートメント
- getBytes
- getter
- HashMap
- HttpSession
- InputStream
- InputStreamReader
- instanceof
- int
- Integer
- ISO-8859-1
- Iterable<T>
- Iterator
- java.sql.Date
- JspWriter
- JSP式
- JSP暗黙オブジェクト「exception」
- LineNumberInputStream
- long
- Long
- Math
- NaN
- null
- NullPointerException
- Object
- OutputStream
- OutputStreamWriter
- PipedInputStream
- PipedOutputStream
- PipedReader
- PipedWriter
- PreparedStatement
- println
- PrintStream
- PrintWriter
- privateフィールド
- protectedフィールド
- publicフィールド
- PushbackInputStream
- PushbackReader
- Reader
- ResultSet
- return
- setter
- short
- Short
- size
- SQLException
- Statement
- static final
- staticフィールド
- static初期化子
- StringBuffer
- StringBufferInputStream
- StringReader
- StringWriter
- superフィールド
- switch
- switchステートメント
- synchronizedブロック
- this
- Timestamp
- toString
- true
- UDP
- Unicode
- unsigned
- valueOf
- void
- whileステートメント
- Writer
- |=演算子
- ||演算子
- ~演算子
- 「D」
- 「d」
- 「F」
- 「f」
- 「L」
- 「l」
- アップキャスト
- アドレス
- アンボクシング変換
- インスタンス
- インターフェイス
- エポック
- オブジェクト型
- オブジェクト指向
- オートボクシング
- オーバーライド
- オーバーロード
- ガベージコレクション
- キャスト
- キャスト演算子
- クイックソート
- クラス
- コレクション
- シグネチャー
- シンボル
- ジェネリッククラス
- ジェネリックメソッド
- スコープ
- ステートメント
- ストリーム
- ソート
- ダウンキャスト
- テーブル
- データベース
- トークン
- ナローイング変換
- バイト
- バイトストリーム
- バイト入力ストリーム
- バイト出力ストリーム
- ビット
- ビットフラグ
- フィールド
- プリミティブ型
- プロトタイプ
- ボクシング変換
- ポリモーフィズム
- メソッド
- ラッパー
- リテラル
- リフレクション
- ローカル変数
- ワイドニング変換
- 丸め誤差
- 二次元配列
- 仮数部
- 修飾子
- 倍精度浮動小数点型
- 全角
- 内部クラス
- 列
- 初期値
- 割り算
- 動的束縛
- 匿名クラス
- 半角
- 単精度浮動小数点型
- 単項+演算子
- 単項-演算子
- 参照
- 四捨五入
- 型
- 型変換
- 基本データ型
- 変数
- 変数宣言
- 契約による設計
- 安定ソート
- 完全修飾クラス名
- 定数
- 定数式
- 宣言
- 寿命
- 引き算
- 引数
- 戻り値
- 拡張for
- 指数部
- 排他的論理和
- 掛け算
- 数値格上げ変換
- 整数
- 整数リテラル
- 文字
- 文字コード
- 文字ストリーム
- 文字リテラル
- 文字入力ストリーム
- 文字出力ストリーム
- 明示的
- 暗黙的
- 桁溢れ
- 構造体
- 浅いコピー
- 浮動小数点
- 浮動小数点リテラル
- 深いコピー
- 添え字
- 演算
- 演算子
- 無限大
- 真偽値
- 符号
- 符号なし
- 符号付き
- 算術右シフト
- 精度
- 累乗
- 自然数
- 行列
- 論理否定
- 論理和
- 論理演算
- 論理積
- 足し算
- 辞書
- 配列
- 配列初期化子
- 降順
「サンプルプログラムとか」に含まれているページ
- !=演算子
- !演算子
- &&演算子
- &=演算子
- &演算子
- *演算子
- ++
- ++演算子
- +演算子
- --演算子
- -演算子
- /演算子
- 0x
- 10進数
- 16進数
- 2の補数
- 2進数
- 8進数
- <%= %>
- <<=演算子
- <<演算子
- <=演算子
- <T>
- <演算子
- ==演算子
- =演算子
- >=演算子
- >>=演算子
- >>>=演算子
- >>>演算子
- >>演算子
- >演算子
- ?演算子
- @deprecated
- [
- ^=演算子
- ^演算子
- ArrayList
- ArrayStoreException
- ASCII
- BigDecimal
- boolean
- booleanリテラル
- BufferedOutputStream
- BufferedWriter
- byte
- Byte
- ByteArrayInputStream
- ByteArrayOutputStream
- char
- CharArrayReader
- clone
- close
- Comparable
- compareTo
- CP932
- CREATE TABLE
- DataInputStream
- DataOutputStream
- Date
- Deprecated
- DOM
- double
- DTD
- EOF
- EOFException
- equals
- EUC
- EUC-JP
- false
- FileInputStream
- FileOutputStream
- FileReader
- FilterOutputStream
- finalクラス
- final変数
- float
- forステートメント
- getBytes
- HashMap
- Hashtable
- IANA
- import
- InputStream
- instanceof
- int
- ISO-10646-UCS-2
- ISO-2022-JP
- ISO-8859-1
- java.sql.Date
- JAVA_HOME
- Java仮想マシン
- JSP式
- long
- Map
- NaN
- new
- Node
- null
- Object
- ObjectInputStream
- ObjectOutputStream
- OutputStreamWriter
- println
- PrintStream
- PrintWriter
- privateクラス
- privateメソッド
- protectedクラス
- protectedメソッド
- publicクラス
- ResultSet
- return
- SELECT
- Serializable
- Shift_JIS
- short
- Short
- StackOverflowError
- Statement
- static final
- staticクラス
- staticメソッド
- strictfp
- String
- StringReader
- switch
- switchステートメント
- synchronizedブロック
- throw
- Throwable
- throws
- Timestamp
- toString
- transient
- true
- UCS-2
- UDP
- Unicode
- US-ASCII
- UTF-8
- void
- whileステートメント
- Windows-31J
- Xerces
- XML
- |=演算子
- ||演算子
- |演算子
- ~演算子
- 「D」
- 「d」
- 「F」
- 「f」
- 「L」
- 「l」
- 「偽」
- 「真」
- アップキャスト
- アンボクシング変換
- インスタンス
- インスタンスは不変
- インターフェイス修飾子
- エイリアス
- エンクロージングインスタンス
- オブジェクト型
- オブジェクト指向
- オートボクシング
- オーバーライド
- オーバーロード
- キャスト
- キャスト演算子
- クエリー
- クラス
- クラス修飾子
- コンストラクタ修飾子
- コンパイルタイムエラー
- サフィックス
- シフトJIS
- ジェネリッククラス
- ジェネリックメソッド
- スコープ
- スタック領域
- ステートメント
- ソート
- ダウンキャスト
- ダンプ
- テキストファイル
- テーブル
- データベース
- ナローイング変換
- バイアス
- バイト
- バイトストリーム
- バイト入力ストリーム
- バイト出力ストリーム
- バイナリーファイル
- バッファアンダーフロー
- バッファアンダーラン
- バッファオーバーフロー
- バッファオーバーラン
- ビット
- ビットシフト演算子
- ビットフラグ
- ブロックします
- プリミティブ型
- ボクシング変換
- ポリモーフィズム
- メソッド修飾子
- メソッド呼び出し変換
- ラッパー
- ローカルクラス
- ローカル変数
- ワイドニング変換
- 丸め誤差
- 乱数
- 二次元配列
- 代入変換
- 代入演算子
- 仮数部
- 倍精度浮動小数点型
- 全角
- 内部クラス
- 列
- 初期値
- 初期化
- 割り算
- 動的
- 匿名クラス
- 単精度浮動小数点型
- 単純代入演算子
- 単項+演算子
- 単項-演算子
- 参照
- 四捨五入
- 型
- 型変換
- 基本データ型
- 変数
- 変数宣言
- 多次元配列
- 大文字
- 定数
- 定数式
- 宣言
- 寿命
- 引き算
- 戻り値
- 指数部
- 掛け算
- 推奨されていません
- 数値格上げ変換
- 整数
- 整数リテラル
- 文字
- 文字コード
- 文字リテラル
- 文字入力ストリーム
- 文字列リテラル
- 文字化け
- 明示的
- 暗黙的
- 未定義
- 桁溢れ
- 桁落ち
- 標準入出力
- 浮動小数点
- 浮動小数点リテラル
- 添え字
- 演算
- 無印クラス
- 無印メソッド
- 無理数
- 無限大
- 環境変数
- 直列化
- 真偽値
- 符号
- 符号なし
- 符号付き
- 算術右シフト
- 精度
- 累乗
- 自然数
- 行
- 複合代入演算子
- 論理値
- 論理右シフト
- 足し算
- 配列
- 配列初期化子