2008年07月26日

Internet Explorerのホームページについて

Internet Explorerでは「ツール」→「インターネットオプション」→「全般」でソフトを起動したときに表示できるホームページを変更できるが、稀にInternet Explorerの最新バージョンの紹介をするMicrosoftのページに飛ばされることがあるが、そのタイミングに再現性が無く微妙に気持ち悪い。以下に無効にする方法を示す。

「ツール」→「インターネットオプション」→「詳細設定」→「Internet Explorerの更新について自動的に確認する」のチェックを外す


新カテゴリ追加

カテゴリとしと「数学」と「物理学」を追加。
posted by vNull | Comment(0) | TrackBack(0) | 更新情報 | Edit

Javaにおける文字列の扱いとStringBuffer

C++ではSTLにて利用可能なstringクラスがある。従来のC言語では文字列の長さの取得をstrlen()、文字列の比較をstrcmp等で行っていたが、stringクラスを利用することにより、実装されたメソッドやオーバーロードにより文字列操作を行うことが可能である。同様の機能としてJavaにもStringクラスが存在するがC++といくつか異なる点がある。

//C++
cout << "Hello, World" << endl;       //(1)
//Java
System.out.println("Hello, World");   //(2)

(1)のコードはC++で書かれたものである。C++では二重引用符で囲まれたものは処理系依存であるが基本的にconst char*として扱われる。(2)はJavaで書かれたもので、Javaでは二重引用符で囲まれたものはStringオブジェクトとして扱われる。ここが大きな差である。なので以下のようなコードも文法上全く問題無いのである。

System.out.println("Hello, World".length());   //Stringメソッドのlength()を呼び出している

実行結果

12

次に+=演算子等の扱いについて。

//C++
string str("Hello, ");
str += "World";  //(3)

//Java
String str = new String("Hello, ");
str += "World";  //(4)

(3)ではconst char*型である右辺値をstring型オブジェクトである左辺値strでオーバーロードされた+=演算子にてstrのデータを直接書き換えているが、(4)では、String型である右辺値をString型である左辺値の末端に付け加えたオブジェクトを新たに生成し、それを左辺値に代入を行っているのである。これが意図することは、Javaにてforやwhile等でString型のオブジェクトに対して新たな文字列を逐次付け加える処理を行った場合、その都度メモリに新しいオブジェクトが生成されることを意図している。Javaではガーベージコレクタを実装しているので、参照が無効となった時点でメモリが解放されることになっているが、パフォーマンス的に言うならよろしくない。そこでJavaでは文字列の付け加えを行う場合にはStringBufferクラスの使用を推奨している。
もう一つとして、C++では文字列の終端文字として\0を原則としていたが、Javaでは基本的に終端文字は存在しないのである。これは終端文字の役割を考えれば明らかであるが、標準の文字列としてStringオブジェクトを扱うJavaには、そもそも終端文字が必要ないのである。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。