IT技術Labo - HouseTect

Javaフリーエンジニアとしての苦悩や、アーキテクトになるための努力の軌跡を掲載しています。.NETとJavaに力を入れた技術情報発信ブログです。

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

擬似プリミティブ型とインスタンス化


文字列はクラス java.lang.String 型のれっきとしたオブジェクトなのですが、頻繁に使うので、プリミティブ型と同様の記法も許されており、その場合は、equals() と == が、ある程度までは、同じ結果を返すような仕組みを持っています。

オブジェクトは、一般的には次の書式で生成(インスタンス化)します。

// 一般論
クラス名 変数名 = new クラス名(引数);
// String型の場合
String str = new String("文字列");

文字列は頻繁に使うために特例措置がなされていて、次のように二重引用符で文字列をくくると、自動的に String 型オブジェクトを生成してくれます。

String str = "文字列";

この書式が通常のオブジェクト生成と異なるのは、ここで記述した文字列と等価な String 型オブジェクトが既に存在していれば、既存の String 型オブジェクトを参照する ID を代入するということです。内部的には次の手順が踏まれています。

1. 既存の文字列に同じものがないかどうか評価
2. もし既に存在していれば、既存のオブジェクトへの参照を代入
3. もし既存の文字列に等価なものが存在しなければ、新たに生成して、そのオブジェクトへの参照を代入

続きでサンプルをご覧ください...


■サンプル

文字列について、擬似プリミティブ型と、通常のインスタンス化の違いをハイライトするサンプルを紹介します。

StringTest.java:

class StringTest {
public static void main(String[] args) {
//擬似プリミティブ型
String str1 = "Hello";
String str2 = "Hello";
System.out.println("str1 == str2: " + (str1 == str2));
//オブジェクト
String obj1 = new String("Hello");
String obj2 = new String("Hello");
System.out.println("obj1 == obj2: " + (obj1 == obj2));
System.out.println("obj1.equals(obj2): " + (obj1.equals(obj2)));
}
}

実行例:

C:\java>javac StringTest.java
C:\java>java StringTest
str1 == str2: true
obj1 == obj2: false
obj1.equals(obj2): true



擬似プリミティブ型で作った文字列オブジェクト str1/str2 の場合は、プリミティブ型と同様の意味で == で比較できます。これはオブジェクトとしては特殊なことです。文字列は頻繁に使うために、プリミティブ型と同様の操作性を確保するために採用された特例措置によるものです。

通常のオブジェクトの作成と同じ形式で作った文字列オブジェクト obj1/obj2 の場合は、 == では、保持している値自身が比較されるので、別のオブジェクトの参照同士を比較したことになり、 false が戻ります。 equals() では、参照しているオブジェクトの実体が比較されるので、今の場合は true が戻ります。
スポンサーサイト



↓のボタンでこのブログの記事をランダムに表示します。

●Homeへ戻る●

COMMENT

Name
E-mail
URL
Comment
Pass  *
Secret? (管理者にだけ表示)

Pickup Link!

COUNTER



RSSの登録はこちらからどうぞ。
RSS

ブログ内の検索

Google

プロフィール

Hisasann

Author:Hisasann
かなり走り書きなブログで申し訳ないです。個人のメモ程度に使っていますが、よかったら参考にしてくださいね。メールまってま~す。

相互リンク募集しています。 下記メアドまでメールください。
Rastaman@Mixi
Rastaman@コトノハ
Rastaman@テクノラティ

アクセスランキング

ブログパーツ

ブログランキング



ブロとも申請フォーム


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。