2024.10.09
引数の型キャスト
はじめに
ここでは、メソッドの引数に違うデータ型の変数を指定する方法を説明します。
例えば、呼びたいメソッドの引数がint型で、引数として使いたい変数がlong型の場合、どのように記述すればメソッドが呼び出せるかを説明しています。
private static int add( int a, int b ) { return a + b; } public static void main( String[] args ) { long a = 10; long b = 20; // long型の変数でメソッドを呼び出すとコンパイルエラーになる int ans = add( a, b ); : }
型の違いでコンパイルエラー
TypeCasting4.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021
// このソースコードはコンパイルに失敗します。 public class TypeCasting4 { // int型のaとbを足した結果を戻すメソッド private static int add( int a, int b ) { return a + b; } // メインメソッド public static void main( String[] args ) { // long型の変数に値を代入 long a = 10; long b = 20; // long型の変数aとbでaddメソッドを呼び出す int ans = add( a, b ); // ここでコンパイルエラー // 結果を出力 System.out.println( ans ); } }
TypeCasting4.java:16: エラー: 不適合な型: 精度が失われる可能性があるlongからintへの変換 int ans = add( a, b ); // ここでコンパイルエラー
TypeCasting3.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
public class TypeCasting3 { // int型のaとbを足した結果を戻すメソッド private static int add( int a, int b ) { return a + b; } // メインメソッド public static void main( String[] args ) { // short型の変数に値を代入 short a = 10; short b = 20; // short型の変数aとbでaddメソッドを呼び出す int ans = add( a, b ); // 結果を出力 System.out.println( ans ); } }
型を変更しコンパイルを成功させる
それでは、ここからコンパイルを成功させる方法について説明します。
private static int add( int a, int b ) { return a + b; }
long型の変数の場合
long a = 10; long b = 20; int ans = add( (int)a, (int)b );
float型の変数の場合
float a = 10.5f; float b = 20.5f; int ans = add( (int)a, (int)b );
double型の変数の場合
double a = 10.5; double b = 20.5; int ans = add( (int)a, (int)b );
この方法は、コンパイルに成功しますが、正しい結果が得られるかどうかはプログラムの仕様しだいです。
例えば、上記のfloat型とdouble型の例ですが、addメソッドはaとbを足した結果を戻すメソッドなので「31」が戻ってほしいところですが、実際には「30」が戻ります。、
double型のa=10.5をint型に型キャストするとa=10になり、同様にb=20となります。小数点以下は切り捨てになるからです。
型名 | 分類 | 情報量 | 値の範囲 |
---|---|---|---|
int | 符号付き整数型 | 32bit | -2147483648(-215) ? 2147483647(215-1) |
long | 符号付き整数型 | 64bit | -9223372036854775808(-231) ? 9223372036854775807(231-1) |
Javaのソースコード
long型をint型にキャストするソースコード例
TypeCasting5.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
public class TypeCasting5 { // int型のaとbを足した結果を戻すメソッド private static int add( int a, int b ) { return a + b; } // メインメソッド public static void main( String[] args ) { // long型の変数に値を代入 long a = 10; long b = 20; // int型にキャストしたlong型の変数aとbでaddメソッドを呼び出す int ans = add( (int)a, (int)b ); // 結果を出力 System.out.println( ans ); } }
実行結果
30
float型をint型にキャストするソースコード例
TypeCasting6.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
public class TypeCasting6 { // int型のaとbを足した結果を戻すメソッド private static int add( int a, int b ) { return a + b; } // メインメソッド public static void main( String[] args ) { // float型の変数に値を代入 float a = 10.5f; float b = 20.5f; // int型にキャストしたfloat型の変数aとbでaddメソッドを呼び出す int ans = add( (int)a, (int)b ); // 結果を出力 System.out.println( ans ); } }
実行結果
30
double型をint型にキャストするソースコード例
TypeCasting7.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
public class TypeCasting7 { // int型のaとbを足した結果を戻すメソッド private static int add( int a, int b ) { return a + b; } // メインメソッド public static void main( String[] args ) { // double型の変数に値を代入 double a = 10.5; double b = 20.5; // int型にキャストしたdouble型の変数aとbでaddメソッドを呼び出す int ans = add( (int)a, (int)b ); // 結果を出力 System.out.println( ans ); } }
実行結果
30
以上です。