基本データ型の拡大変換について:簡単に説明すると
基本データ型の拡大変換とは、変数・値のデータ型がより大きいサイズの
基本データ型
に変換されることです。
基本データ型の拡大変換について:もっと詳しく
拡大変換は次の3つの場合に自動的に行われます。
このような場合に、要求されているデータ型より小さいデータ型を使用すると自動的に大きいデータ型への拡大変換
が行われます。
データ型が拡大変換される方向は以下の通りです。
byte ──→ short ─┬→ int ──→ long ──→ float ──→ double
│
│
char ─┘
この図で左側のデータ型から右側のデータ型への変換は自動的に行われます。
逆の場合、例えば long 型から short 型には自動的に縮小変換は行われません。
縮小変換を期待してコードを記述するとコンパイルエラーとなります。
なぜなら、サイズの小さいデータ型に変換すると、いままで保持していたデータの一部が切り捨てられて、
予期せぬ値になってしまう可能性があるためです。
そうした事態を防ぐためにコンパイラがエラーを出してくれます。
しかし、プログラマがその危険を承知の上で、それでもなお変換したい場合には
キャスト
という仕組みを用意しています。
キャストを行うことで、基本データ型を縮小変換することができます。
それでは自動的に基本データ型の拡大変換が行われる3つの場合について、それぞれ具体的に見ていきましょう。
まずは代入する際の拡大変換です。
class Test{
public static void main( String args[] ){
byte b = 100;
int i = b;
System.out.println( "i == " + b );
}
}
>javac Test.java
>java Test
i == 100
この例では int 型に byte 型を代入しています。
このようにより小さいデータ型から大きいデータ型に代入を行う場合、コンパイラが自動的にデータ型を拡大変換してくれるので
コンパイルエラーになりません。
しかし、逆に小さいデータ型に代入しようとするとコンパイルエラーになります。
class Test{
public static void main( String args[] ){
int i = 100;
byte b = i;
System.out.println( "i == " + b );
}
}
>javac Test.java
Test.java:4: 精度が落ちている可能性
続いて、メソッド呼び出し時に引数として渡す際の拡大変換を見てみます。
class Test{
public static void main( String args[] ){
byte b = 100;
testPrint( b );
}
public static void testPrint( float f ){
System.out.println( "f == " + f );
}
}
>javac Test.java
>java Test
f == 100.0
この例では、testPrint( ) メソッドは引数として float 型を要求しています。
しかし float 型より小さい byte 型を引数として渡しても、コンパイラが自動的に float 型へ
拡大変換してくれるのでコンパイルエラーになりません。
しかし代入時と同様に、メソッドが引数として要求している型より
大きいデータ型を与えるとコンパイルエラーになります。
class Test{
public static void main( String args[] ){
double d = 100;
testPrint( d );
}
public static void testPrint( float f ){
System.out.println( "f == " + f );
}
}
>javac Test.java
Test.java:4: Test の testPrint(float) は (double) に適用できません。
最後に演算時の拡大変換を見てみましょう。
class Test{
public static void main( String args[] ){
int i = 100;
double d = 50.0;
System.out.println( "( d / i ) == " + ( d / i ) );
}
}
>javac Test.java
>java Test
( d / i ) == 2.0
d / i は異なる型同士で演算を行っています。
しかし、演算時にコンパイラが自動的に小さい型を拡大変換してくれるのでコンパイルエラーになりません。
このように、Java では基本的にサイズの大きいデータ型へは自動的に拡大変換を行うようになっています。
|
SJC-P対策問題集
Java認定試験( SJC-P/310-035 )対策のメルマガ問題集も好評発刊中!
もちろん無料です。
またバックナンバーも見やすくしてオンライン問題集として随時アップしていきます。
受験しない人でも Java の基礎知識を学習するのに最適です。
SJC-P対策参考書
現在、Java認定試験(SJC-P/310-035)対策の参考書は本当にたくさん出版されてます。
ここでは、その中から厳選した本当に役立つ参考書を紹介します。
無駄な出費を抑えるためにも、ぜひ参考にして下さい。
SJC-P対策Java用語集
Java認定試験( SJC-P/310-035 )合格のために必要な Java の用語を集めました。
試験対策にはもちろん、試験以外で Java を学習する際にもご活用下さい。
更新履歴
このサイトの最新情報はここで確認できます。
また、今までこのサイトがどのような軌跡を辿ってきたのかも知ることができます。
Javaを始める人へ
これからJavaを始めようとしているあなたへ。
Javaの勉強を始めるにはどうしたら良いのかを説明しています。
また、初心者に役立つ情報を提供していきます。
Java認定資格の概要
Java認定資格にはどのようなものがあるのか。
資格取得のためにはどのような知識が必要なのか。
その他、資格を取得することのメリットなど、Java認定資格の概要を説明します。
LINK
Javaの勉強に役立つリンク。
その他のプログラミングに関するリンク。
ソフトウェアに関するリンクなど、管理人の主観で集めたリンク集です。
相互リンクも常時募集中!
詳細は以下のページで確認して下さい。
このサイトについて
このサイト「1発合格★Java認定試験!」についての説明です。
サイトで掲載しているソースコードや問題や免責事項などについて説明しています。
初めての人は一度のぞいてみて下さい。
ちょっとひと息
仕事や試験勉強に疲れたら、ここでちょっと一息つきませんか。
一生懸命に打ち込むのも良いけど、たまには何も考えずにゆっくり休むのも良いものです。
たまにはのんびり脳みそをリフレッシュしましょう。
|