Javaにおけるダウンキャストの基本とデータ損失の注意点
Javaでは、変数をより小さい範囲のデータ型へ「ダウンキャスト(縮小変換)」することができます。ただし、キャストには明示的な型変換が必要であり、場合によってはデータの損失が発生する点に注意が必要です。
ダウンキャストとは
ダウンキャストとは、int型からbyte型のように、表現できる値の範囲が狭い型へ変換することです。Javaでは縮小変換は自動的に行われないため、キャスト演算子 () を使って明示的に指定する必要があります。変換後の値が代入先の型の範囲に収まらない場合、上位ビットが切り捨てられ、意図しない値になってしまうことがあります。
サンプルコード
public class Tester {
public static void main(String[] args) {
int a = 300;
byte b = (byte)a;
System.out.println(b);
}
}実行結果
このプログラムを実行すると、次の出力が得られます。
44
なぜ44になるのか
int型の 300 は2進数で「100101100」と表されます。一方、byte型は8ビット(-128〜127)しか保持できません。そのため、キャスト時には下位8ビットの「00101100」だけが残り、これは10進数で 44 になります。
このように、ダウンキャストでは元の値が正しく保持されないケースがあるため、実際の開発では変換前の値が代入先の型の範囲内に収まっているかを必ず確認しましょう。
-
JavaのFocusListenerインターフェースとは?重要性と実装方法を解説
FocusListenerインターフェースとはJava AWT/SwingにおけるFocusListenerは、コンポーネントがキーボードフォーカスを取得・喪失したタイミングで発生するイベントを受け取るためのリスナーインターフェースです。ユーザーがどのコンポーネントを操作しているのかを検知できるため、入力フォームのバリデーションやガイド表示など、対話的なUIを実現するうえで重要な役割を担います。フォーカスイベントは、コンポーネントがキーボードフォーカスを取得または喪失したときに生成されます。フォーカスイベントを表すオブジェクトは、FocusEventクラスから作成されます。FocusEvent
-
Javaでパッケージをコンパイルする方法をわかりやすく解説
Javaパッケージの作成とコンパイルの基本手順ここでは、「animals」という名前のパッケージを作成する例を通して、Javaにおけるパッケージのコンパイル方法を解説します。なお、パッケージ名はクラス名やインターフェース名との名前の衝突(競合)を避けるため、すべて小文字で命名するのがJavaの一般的な慣習です。1. パッケージ内にインターフェースを定義するまず、animalsパッケージに属する「Animal」というインターフェースを定義します。/* ファイル名 : Animal.java */ package animals; interface Animal { &n