基本数値演算
Mathクラスは、指数関数、三角関数などの基本的な数値演算を提供しています。Androidであっても同様です。このクラスのメソッドも、Systemクラス同様、staticで定義されているため、インスタンスを生成することなく使用可能です。
Staticインポート
Mathクラスや前述のSystemクラスなどのstaticメンバにアクセスするには、たとえば次のように、そのメンバのクラスから記述する必要があります。
double r1 = Math.toRadians(30); // 30°をラジアンに変換 double r2 = Math.PI/6; // 30°をラジアンに変換( (30°/ 360°) × 2π ) double x = 10 * Math.cos(r1); // コサイン double y = 10 * Math.sin(r2); // サイン
J2SE 5.0で導入されたstaticインポートという機能を利用すると、staticな定数やメソッドをクラスをつけずに直接参照することができます。この機能は、クラス名の指定が長い、頻繁に利用するといったケースで便利です。たとえば、次のような記述が可能です。
import static java.lang.Math.PI; import static java.lang.Math.cos; public class Sample { double r1 = PI/6; double x = 10 * cos(r1); ... }
「import static java.lang.Math.*」とすれば、そのクラスのメンバをまとめて宣言することもできます。ただし、その場合は、どのクラスのメンバなのかわかりにくくなるため、できるだけ個別にインポートするほうがよいでしょう。
文字列操作
Stringクラスは、もっともおなじみといってもよい文字列のクラスです。文字列の比較、検索、部分文字列の取得、大文字/小文字変換、文字列コピーなどを行うメソッドが用意されています。
StringBuffer、StringBuilderは、可変の文字列を扱う文字列バッファのクラスです。文字列の追加(append)や挿入(insert)といったメソッドがあります。
じつはStringクラスは、固定の文字列しか扱えず、+演算で連結する場合などは、内部的にStringBuilderやStringBufferのappendメソッドを使ったコードに変換されています。
StringBuilderとStringBufferの違い
StringBuilderクラスは、Java SE 5.0で導入されたクラスで、機能はStringBufferクラスと変わりありません。異なるのは、StringBufferがスレッドセーフ(複数のスレッドが同時に実行しても問題が発生しない)に対して、StringBuilderはそうではない、という点です。スレッドを考慮しない分、StringBuilderのほうがメソッドの処理が高速になっています。そのため、スレッドを気にする必要がないケースでは、より速いStringBuilderクラスを使用するよう推奨されています。
なおスレッドについては、後半でまた説明することにします。
ラッパークラス
ラッパークラスとは、基本データ型(プリミティブ型)の変数やリテラルを、オブジェクトとして扱うためのクラスです。おもにデータの型を変換する場合に利用します。
基本データ型 | ラッパークラス |
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
オートボクシング/アンボクシング
Java SE 5.0から、基本データ型から自動的にオブジェクトに変換するオートボクシングと、反対にオブジェクトから基本データ型の変数に自動的に変換する自動アンボクシングの機能が導入されました(ラッパークラスのオブジェクトと基本データ型変数との暗黙の型変換)。そのため、明示的な型変換の記述は不要になりました。
たとえば、コレクションクラスはオブジェクトしか登録できないため、基本データ型の変数をコレクションに登録/参照するには、従来は明示的な型変換が必要でした。AndroidのJavaでは、次のように省略した書き方が可能です。
List<Integer> list = new ArrayList<Integer>(); list.add(new Integer(5)); list.add(5); // オートボクシングにより上と同じ int a = list.get(0).intValue(); int b = list.get(0); // アンボクシング
なお、コレクションクラスについては、次回に説明する予定です。