// から行末まで、および、/* ~ */ の間は コメント とみなされます。コメントには、プログラムの覚書などを記述します。コンパイルの際には無視されます。/** ~ */ もコメントですが、javadoc コマンドで抜き出してドキュメント化することができます。
// ここにコメントを記述します。 a = b + c; /* ここにもコメントを記述します。*/ /* * 複数行にまたがるコメントも可能です。 */ /** * この部分は javadoc コマンドで抜き出すことができます。 */
Java 21 では、以下の用語が キーワード として定義されています。キーワードは、変数名やメソッド名などの識別子として用いることはできません。
コンテキストによって下記のものもキーワードとして扱われます。
Java では、数値や文字列などの値を リテラル と呼びます。リテラルには次のようなものがあります。
□ リテラル ├□ 数字 │├□ 整数 ││├□ 10進数(123 など) ││├□ 16進数(0x89ab など) ││├□ 8進数(0177 など) ││└□ 2進数(0b1100 など) │└□ 浮動小数点(1.23、1.23e45 など) ├□ 文字・文字列 │├□ 文字('a'、'あ' など) │├□ 文字列("Hello" など) │└□ テキストブロック ├□ 論理値(true または false) └□ 空(null)
Java では、以下の型が プリミティブ型(基本的な型)として定義されています。
種別 | 型 | 説明 |
---|---|---|
論理値 | boolean | 真偽値。true または false。 |
文字 | char | 2バイトUNICODE文字。'\u0000'~'\uffff'。 |
整数 | byte | 1バイト符号付整数。-128~127。 |
short | 2バイト符号付整数。-32768~32767。 | |
int | 4バイト符号付整数。-2147483648~2147483647。 | |
long | 8バイト符号付整数。約-922京~約922京。 | |
浮動小数 | float | 4バイト浮動小数点数。 |
double | 8バイト浮動小数点数。 |
boolean には真偽を表す特別な値として true または false を指定します。
boolean b = true;
char は1文字を表す2バイトの型です。1文字をシングルクォーテーション(')で囲みます。Unicodeで U+0000~U+FFFF までの文字を扱うことができます。\u3042 はUnicodeの U+3042(あ) を意味します。
char c1 = 'A';
char c2 = 'あ';
char c3 = '\u3042';
char c4 = 0x3042; // '\u3042' と同義
エスケープシーケンス を使用することもできます。
char c5 = '\n'; // 改行(LF)
byte は1バイト整数を示します。-128~127 までの数値を表すことができます。
byte b = 127;
short は2バイト整数を示します。-32,768~32,767 までの数値を表すことができます。
short s = 32767;
int は4バイト整数を示します。-2147483648~2147483647 までの数値を表すことができます。
int n = 2147483647;
long は8バイト整数を示します。-9223372036854775808~9223372036854775807 までの数値を表すことができます。数値の末尾には long 数であることを示す L または l(小文字のL)をつけます。数字の 1 と見間違えやすいので大文字の L を使用するのがおススメです。
long n = 9223372036854775807L;
数値の先頭に 0 をつけると8進数、0x(または 0X)をつけると16進数とみなします。Java 7 からは 0b(または 0B)をつけて2進数も表せるようになりました。
int n1 = 123; // 10進数 int n2 = 0b11110000; // 2進数 int n3 = 0755; // 8進数 int n4 = 0x1b4c; // 16進数
Java 7 以降では、数値の桁区切りとしてアンダースコア(_)を使用することができます。
int n1 = 12_345_678; // 12,345,678
int n2 = 0b1111_0000_1100_0011;
C言語やC++では unsigned を用いて非負整数を表すことができます。例えば unsigned char は 0~255、unsigned short は 0~65535 までの数値を表すことができます。しかし Java では unsigned はサポートされていません。Java で 128 を表すには char の代わりに short を使用するか、Java 8 でサポートされた下記などのメソッドを使用する必要があります。
z = Integer.compareUnsigned(x, y); // x, yを非負整数として比較する z = Integer.divideUnsigned(x, y); // x, yを非負整数として除算する z = Integer.remainderUnsigned(x, y); // x, yを非負整数として除算した余りを返す s = Integer.toUnsignedString(x); // xを非負整数として文字列に変換する
float は32ビット浮動小数点数(小数点を含む数値)を示します。float型の数値の末尾には F または f をつけます。
float f1 = 12.3F; float f2 = 12.3f;
double は64ビット浮動小数点数を示します。
double d1 = 12.3;
12.3e4 は 12.3×10の4乗を意味します。
float f1 = 12.3e4F; double d1 = 12.3e4;
浮動小数点数に関連して、以下の特別な値が用意されています。
float f1 = Float.NaN; // 非数(Not a Number) float f2 = Float.POSITIVE_INFINITY; // 正の無限大 float f3 = Float.NEGATIVE_INFINITY; // 負の無限大 double d1 = Double.NaN; // 非数(Not a Number) double d2 = Double.POSITIVE_INFINITY; // 正の無限大 double d3 = Double.NEGATIVE_INFINITY; // 負の無限大
enum は 列挙型 を定義します。列挙型は複数の定数(列挙子)を持ち、列挙型の変数はいずれかひとつの列挙子の値を持ちます。Java 5 でサポートされました。
enum Color {
RED,
GREEN,
BLUE
};
public class Main {
public static void main(String[] args) {
Color c = Color.RED;
System.out.println(c); // RED
}
}
void は値を返さない型を意味します。例えば、下記の例では、add() というメソッドは int の値を返しますが、test() というメソッドは値を返しません。
int add(int x, int y) { return x + y; } void test() { System.out.println("TEST"); }
Java 10 からは初期値を持つ変数を宣言する際に var を用いると右辺の値によって型を推論して定義してくれるようになりました。
var a1 = 123; // Integer var a2 = 123L; // Long var a3 = 12.3F; // Float var a4 = 12.3; // Double var a5 = true; // Boolean var a6 = 'A'; // Character var a7 = "ABC"; // String
ある変数の型を調べるには次のようにします。
((Object)value).getClass().getSimpleName()
null は値無しを意味する特別な値です。プリミティブ型は null 値にすることはできませんが、String やクラスインスタンスには null を設定することができます。
String str = null;
Java で利用可能な演算子を以下に示します。大半は、C、C++、JavaScript と同様の演算子です。
カテゴリ | 演算子 | 説明 | 使用例 |
---|---|---|---|
四則演算 | + | 加算。 | a = b + c; |
- | 減算。 | a = b - c; | |
* | 乗算。 | a = b * c; | |
/ | 除算。 | a = b / c; | |
% | 剰余。 | a = b % c; | |
単項演算子 | - | 負数。 | a = -123 |
++ | インクリメント。 | a++; ++a; | |
-- | デクリメント。 | a--; --a; | |
代入演算子 | = | 代入演算子。 | a = b; |
比較演算子 | == | 等しい。 | if (a == b) |
!= | 異なる。 | if (a != b) | |
< | より小さい。 | if (a < b) | |
> | より大きい。 | if (a > b) | |
<= | 等しいかより小さい。 | if (a <= b) | |
>= | 等しいかより大きい。 | if (a >= b) | |
論理演算子 | && | かつ。 | if ((a == b) && (c == d)) |
|| | または。 | if ((a == b) || (c == d)) | |
! | ではない。 | if (!(a == b)) | |
ビット演算子 | & | 論理積(AND)。 | a = b & c; |
| | 論理和(OR)。 | a = b | c; | |
! | 論理否定(NOT)。 | a = ! b; | |
^ | 排他的論理和(EOR)。 | a = b ^ c; | |
~ | ビット反転。 | a = ~ b; | |
<< | 算術左シフト。 | a = b << 2; | |
>> | 算術右シフト。 | a = b >> 2; | |
>>> | 論理右シフト。 | a = b >>> 2; | |
算術代入演算子 | += | 加算代入。 | a += b; |
-= | 減算代入。 | a -= b; | |
*= | 乗算代入。 | a *= b; | |
/= | 除算代入。 | a /= b; | |
%= | 余り代入。 | a %= b; | |
&= | 乗算代入。 | a &= b; | |
|= | 論理和代入。 | a |= b; | |
^= | 排他的論理和代入。 | a ^= b; | |
<<= | 算術左シフト代入。 | a <<= b; | |
>>= | 算術右シフト代入。 | a >>= b; | |
>>>= | 論理右シフト代入。 | a >>>= b; | |
三項演算子 | ? : | 三項演算子。 | a = (b == c) ? d : e; |
a++ と ++a はどちらも a の値をひとつ増やしたものを a に代入しますが、式の値が異なります。a++ はインクリメントする前の、++a はインクリメントした後の値を返します。
a = 5; b = a++; // b には 5 が代入される a = 5; b = ++a; // b には 6 が代入される
比較演算子 == を文字列の比較の意味で String オブジェクトなどに使用することはできません。下記のような使用例は誤りです。
String s1 = "ABC";
String s2 = "DEF";
if (s1 == s2) { // 文字列の比較になっていない
System.out.println("Match!");
}
文字列の比較には equals() を用います。
String s1 = "ABC"; String s2 = "DEF"; if (s1.equals(s2)) { System.out.println("Match!"); }
型やクラスを一時的に変換して参照することを キャスト と呼びます。例えば下記の例で、int値を long値に代入することは可能ですが、int値を short値に代入しようとするとコンパイルエラーになります。これは、int → short の代入では、値のオーバーフローが発生してしまう可能性があるためです。
int intValue = 123;
long longValue = intValue;
short shortValue = intValue; // コンパイルエラー
この問題を解決するには、int値を明示的に short値に変換してから代入します。これを「short にキャストする」と言います。
short shortValue = (short)intValue;
下記はクラスをキャストする例です。ArrayList の get() メソッドで得た Objectクラスの値を Stringクラスにキャストしてから参照しています。
import java.util.*; class CastTest { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(new String("AAA")); list.add(new String("BBB")); list.add(new String("CCC")); for (int i = 0; i < list.size(); i++) { String s = (String)list.get(i); System.out.println(s); } } }