Javaの拡大プリミティブ変換(Widening Primitive Conversion)をサンプルコードで解説
Javaでは、あるプリミティブ型の値を、より表現範囲の広い別のプリミティブ型へ自動的に変換することを「拡大プリミティブ変換(Widening Primitive Conversion)」と呼びます。たとえば byte → short → int → long → float → double のように、データの損失なく小さい型から大きい型への変換が行われます。
以下は、拡大プリミティブ変換の動作を示すサンプルプログラムです。
サンプルコード
public class Demo {
public static void main(String[] args) {
System.out.print("H" + "E");
System.out.print('L');
System.out.print('L');
System.out.print('O');
}
}
実行結果
HELLO
コードの解説
このプログラムでは、Demo というクラス内に main メソッドを定義しています。まず、ダブルクォーテーション(")で囲まれた文字列リテラル「H」と「E」を「+」演算子で連結して出力し、続いてシングルクォーテーション(')で囲まれた文字リテラル 'L'、'L'、'O' を順に出力しています。その結果、画面には「HELLO」と表示されます。
ここでポイントとなるのが「+」演算子の存在です。Javaにおいて拡大プリミティブ変換が発生する典型的な場面の一つが、算術演算子を使用するときです。「+」演算子は左右のオペランドに対して整数(int型)を前提として動作するため、char型の値が演算に含まれると、そのcharは自動的にintへと拡大変換されます。たとえば 'L' + 1 のような式では、'L'(Unicode値:76)がいったんint型の 76 に変換されてから計算が行われるのです。
一方で、System.out.print にcharを単独で渡した場合は型変換は起こらず、そのまま文字として出力されます。拡大変換が行われるのは、あくまで数値としての演算や評価が行われるタイミングである点に注意しましょう。
-
Javaの配列はプリミティブ型?それともオブジェクト?その理由を解説
Javaにおいて、配列は「オブジェクト」として扱われます。その理由は、配列が「new」キーワードを使って生成できる点にあります。「new」演算子は常にオブジェクトを生成するために使用されるため、配列もオブジェクトとして認識されるのです。すべての配列の直接的な親クラス(スーパークラス)は「Object」クラスです。つまり、Javaのあらゆる配列型は何らかのクラスに属しており、int型の配列、float型の配列、double型の配列など、それぞれに対応するクラスが存在することになります。さらに、配列は動的に生成できるだけでなく、変数に代入することも可能です。配列がオブジェクトであることを裏付ける特
-
Java 9のモジュールシステムとは?Jigsawプロジェクトの概要と基本構文を解説
Java 9における最大の変更点の一つがモジュールシステム(Module System)です。これはJigsaw(ジグソー)プロジェクトの一環として導入された機能で、以下のような要素で構成されています。モジュール化されたJDKモジュール化されたJavaソースコードモジュール化されたランタイムイメージJava内部APIのカプセル化Javaプラットフォームモジュールシステムモジュールシステム導入の目的モジュールシステムを導入する主な動機の一つは、モジュール化されたJVMを実現し、利用可能なメモリが少ないデバイス上でもJavaアプリケーションを動作させられるようにすることです。従来はJVM全体が必要