はじめに
Java や他のオブジェクト指向言語では、オブジェクトは関連データのコレクションであり、メソッドのセットが付属しています。これらのメソッドはオブジェクトに対して操作を行い、計算を実行し、時にはオブジェクトのデータを変更します。ここでは、3 つの簡単で重要な Java の組み込みオブジェクト型:Number、String、Array を紹介します。
数値型
基本的には、byte、int、double などのプリミティブな数値型を使用します。ただし、時にはプリミティブデータ型の代わりにオブジェクトを使用する必要があります。Java はプリミティブデータ型に対するラッパークラスを提供しています。それらは Byte、Short、Long、Integer、Double、Float などです。ラッパーオブジェクトはプリミティブデータ型に戻すことができます。このプロセスは アンボクシング と呼ばれます。Number クラスは java.lang パッケージの一部です。パッケージについては後で説明します。
以下は、Number クラスのサブクラスが実装する一般的なクラスメソッドの一部のリストです。
- xxxValue(): この
Numberオブジェクトの値を xxx データ型に変換して返します。 - compareTo(): この
Numberオブジェクトと引数を比較します。 - equals(): この
Numberオブジェクトが引数と等しいかどうかを判定します。 - valueOf(): 指定されたプリミティブの値を保持する
Integerオブジェクトを返します。 - toString(): 指定された
intまたはIntegerの値を表すStringオブジェクトを返します。 - parseInt(): このメソッドは、特定の
String値からプリミティブなint型を取得するために使用されます。 - abs(): 引数の絶対値を返します。
- ceil(): 引数以上の最小の整数を返します。
doubleとして返されます。 - floor(): 引数以下の最大の整数を返します。
doubleとして返されます。 - pow(): 第 1 引数を第 2 引数の累乗にした値を返します。
- round(): メソッドの戻り値の型に応じて、引数に最も近い
longまたはintを返します。
例:
/home/labex/project/numberTest.java ファイルに次のコードを記述します。
public class numberTest
{
public static void main(String[] args){
Integer x = 1; // int を Integer オブジェクトにボックス化
x = x + 1; // Integer を int にアンボックス化
System.out.println(Integer.parseInt("10")); // 文字列を解析して int を取得
System.out.println( "x = " + x);
}
}
出力:
次のコマンドを使用して numberTest.java ファイルを実行します。
javac /home/labex/project/numberTest.java
java numberTest
出力を確認します。
10
x = 2
文字列型
文字列はオブジェクトですので、「文字列オブジェクトに含まれるデータは何ですか?」と「文字列オブジェクトで呼び出せるメソッドは何ですか?」という質問ができるでしょう。文字列オブジェクトの構成要素は文字です。すべての文字が文字であるわけではありません。一部は数字で、一部は特殊記号で、残りはその他の種類の文字です。簡単のために、すべてを文字と呼びます。String クラスには多くの文字列メソッドがありますが、そのうちいくつかのみを使用します。残りは 公式サイト のドキュメントを参照することができます。
注:String クラスは不変ですので、一度作成された文字列オブジェクトは変更できません。文字の文字列を多くの変更を加える必要がある場合は、StringBuffer と StringBuilder クラスを使用する必要があります。
以下は、String、StringBuffer、StringBuilder クラスの一般的なメソッドの一部のリストです。
- ***char charAt(int index)***:
index引数によって示されるように、現在文字列バッファによって表されるシーケンスの指定された文字を返します。 - ***void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)***:この文字列バッファの文字を、宛先文字配列
dstにコピーします。 - ***int indexOf(String str)***:この文字列内の指定された部分文字列の最初の出現位置のインデックスを返します。
- ***int indexOf(String str, int fromIndex)***:指定されたインデックスから始めて、この文字列内の指定された部分文字列の最初の出現位置のインデックスを返します。
- ***int lastIndexOf(String str)***:この文字列内の指定された部分文字列の最も右の出現位置のインデックスを返します。
- ***int lastIndexOf(String str, int fromIndex)***:指定されたインデックスから始めて後方に検索して、この文字列内の指定された部分文字列の最後の出現位置のインデックスを返します。
- ***int length()***:この文字列バッファの長さ(文字数)を返します。
- ***String substring(int start)***:この
StringBufferに現在含まれる文字の部分列を含む新しいStringを返します。部分文字列は指定されたインデックスから始まり、StringBufferの末尾まで伸びます。 - ***String substring(int start, int end)***:この
StringBufferに現在含まれる文字の部分列を含む新しいStringを返します。
例:
/home/labex/project/stringTest.java ファイルに次のコードを記述します。
public class stringTest
{
public static void main(String[] args){
String greeting = "Hello world!";
String hello = new String("Hello!");
System.out.println("greeting is: "+ greeting);
System.out.println("hello is: "+ hello);
System.out.println("length of greeting: " + greeting.length());
System.out.println("first char of greeting: " + greeting.charAt(0));
System.out.println("index of 'e' in hello: "+ hello.indexOf('e'));
System.out.println("substring of greeting: "+ greeting.substring(6)); //substr: world
}
}
出力:
次のコマンドを使用して stringTest.java ファイルを実行します。
javac /home/labex/project/stringTest.java
java stringTest
出力を確認します。
greeting is: Hello world!
hello is: Hello!
length of greeting: 12
first char of greeting: H
index of 'e' in hello: 1
substring of greeting: world!
配列
配列構造はデータのコレクションを格納するために使用されますが、配列を単一の型の変数のコレクションとして考える方が多くの場合便利です。number0、number1、...、number99 のような個々の変数を宣言する代わりに、1 つの配列変数 numbers を宣言し、numbers[0]、numbers[1]、...、numbers[99] を使用して個々の変数を表します。配列の最初の要素はインデックス 0 にあります。
以下は、配列が持つ一般的なメソッドの一部のリストです。
- ***public static int binarySearch(Object[] a, Object key)***:二分探索アルゴリズムを使用して、指定された配列内で指定された値を検索します。このメソッドを呼び出す前に、配列はソートされている必要があります。検索キーが配列に含まれている場合は、そのインデックスを返します。それ以外の場合は
(–(挿入位置 + 1))を返します。 - ***public static boolean equals(long[] a, long[] a2)***:2 つの指定された
long型の配列が互いに等しい場合はtrueを返します。2 つの配列が同じ数の要素を含み、2 つの配列のすべての対応する要素のペアが等しい場合、2 つの配列は等しいと見なされます。2 つの配列が等しい場合はtrueを返します。同じメソッドは他のプリミティブデータ型(byte、short、intなど)でも使用できます。 - ***public static void fill(int[] a, int val)***:指定された
int型の配列の各要素に指定されたint値を割り当てます。同じメソッドは他のプリミティブデータ型(byte、shortなど)でも使用できます。 - ***public static void sort(Object[] a)***:指定されたオブジェクトの配列を、その要素の自然な順序に従って昇順にソートします。同じメソッドはプリミティブデータ型(
byte、short、intなど)でも使用できます。
例:
/home/labex/project/arrayTest.java ファイルに次のコードを記述します。
public class arrayTest
{
public static void main(String[] args){
// 空の配列を初期化するには new を使用できます。
String[] nameArray1 = new String[5];
// 空の nameArray1 の要素に同じ名前 "abc" を入力します。
java.util.Arrays.fill(nameArray1,"abc");
// for ループを使用して配列を反復処理することもできます。
for (String name:nameArray1){
System.out.println(name);
}
// いくつかの値を使用して配列を初期化することができます。
String[] nameArray2 = {"Candy", "Fancy", "Ann", "Ella", "Bob"};
// 配列の長さを取得できます。
System.out.println("Length of nameArray2: " + nameArray2.length);
// インデックスで値を取得できます。
System.out.println("The last item of nameArray2 is " + nameArray2[4]);
// 配列オブジェクトをソートします。
java.util.Arrays.sort(nameArray2);
System.out.println("Sorted nameArray2 by alphabet:");
for(String name:nameArray2){
System.out.println(name);
}
}
}
出力:
次のコマンドを使用して arrayTest.java ファイルを実行します。
javac /home/labex/project/arrayTest.java
java arrayTest
出力を確認します。
abc
abc
abc
abc
abc
Length of nameArray2: 5
The last item of nameArray2 is Bob
Sorted nameArray2 by alphabet:
Ann
Bob
Candy
Ella
Fancy
まとめ
主なタスクの多くは、数値や文字列などのデータを操作することですので、Java の組み込みクラスを使用してタスクを実行するのは簡単で効率的です。高度な使用方法については、公式ドキュメントを参照してください。



