Hatena::ブログ(Diary)

出羽ブログ RSSフィード

Seasar Conference 2008 Autumn - 9/6(SAT), Tokyo

2008-01-25

JavaとAction ScriptにおけるString型の違い

| 19:16 | JavaとAction ScriptにおけるString型の違いを含むブックマーク

昨日、「Flex入門」という社内勉強会の資料を公開

したことろ、いろいろとフィードバックを頂きました。

フィードバック有難うございます。

 Flex入門

 http://d.hatena.ne.jp/dewa/20080124#1201162231


スライドの15ページ目に

JavaではString型はオブジェクト型なので挙動が異なる。」

という箇所に id:cero-t さんから

『Stringの挙動、Javaと変わらなくないですか?』という

ツッコミが入る。


コードを書いて確認してみると、確かに挙動は変らない。

なんでだろう?


JavaのString型はクラス(オブジェクト)、

Action ScriptのString型はプリミティブ型。


この違いのため、JavaとAction Script

代入に関する同様の操作をしたところ、

結果が異なることを予想していました。


しかし、実際には挙動というか同じ結果が

得られたので、不思議に思って少し調べてみました。

それを整理したのが下図です。


f:id:dewa:20080125185838j:image


f:id:dewa:20080125185851j:image

内部的なメカニズムが異なるにも関わらず、

挙動が同じように見える謎が解けて、

スッキリしました。

とおりすがりとおりすがり 2008/01/26 03:46 参考にされた記事に修正がかかっています。ご確認ください。

cero-tcero-t 2008/01/29 01:23 そうなんですよね。

Integer a = 10;
Integer b = a;
a ++;

でも、aは11、bは10です。

dewadewa 2008/01/29 11:04 >Integer a = 10;
>Integer b = a;
>a++;
>
>でも、aは11、bは10です。

Integer a = 10;
Integer b = a;
System.out.println(a.hashCode()); // output ’10’
System.out.println(b.hashCode()); // output ’10’
a++;
System.out.println(a.hashCode()); // output ’11’
System.out.println(b.hashCode()); // output ’10’

上記のコードから『a++;』した時点で
aとbは別オブジェクトになっていることが分かりますね。

ラッパー型はボクシングと関連するので、ややこしいですねぇ。

> 参考にされた記事に修正がかかっています。ご確認ください。
とおりすがりさん、有難うございます。

トラックバック - http://d.hatena.ne.jp/dewa/20080125