2012-04-26 3 views
1

私はいくつかのオブジェクトを返すメソッドを持っています。Stringオブジェクトです。どちらがJavaの方が良いか

は今、私はより良い練習とも性能も/ scalabiltyを考慮し、より良いものである上記の2つのpossiblity 1

public String someMethod(){ 

String data=getData(); //This method returns string 

return data; 
} 

または

public String someMethod(){ 

return getData();//This method returns string 

} 

を持っています。あなたの意見を答えてください。御時間ありがとうございます。

+1

私は、コンパイラがそれらの両方を同じステートメント(第2)に変換すると思います...第1は私には意味がありません –

+1

なぜ、使用されていない変数を保持する必要がありますか?最初はナンセンスです。 – devsnd

+0

@SimonWoker私は、コンパイラがそれらを同じバイトコードに変換すると思っていましたが、私のもの(javac 1.7.0_b147)はそうではありませんでした。私は、JITがその違いをなくすと思う。 – emory

答えて

4

変数を変更しない場合は、変数を返すだけでローカルコピーを作成する必要はありません。

コードの2番目のバージョンはよりクリーンで、より簡潔で通常は優先されます。

パフォーマンスが賢明でない場合は、最適化されたコンパイラが変換を実行します。

+0

あなたの答えに感謝します。 – Deva

+0

@Devaよろしくお願いします。 – twain249

+0

最適化されたコンパイラとはどういう意味ですか? 2種類のJDKがあることを意味しますか? – GingerHead

0

2番目の方が良い方法です。第1のものでは、あなたの可変データは実際の目的を果たさない。とにかく、もしこのことがコンパイルされれば、コンパイラは第1のものを第2のものに変更すると思います。

1

プログラミング言語と同じように、可能な限り簡潔かつ明確に表現したいと考えています。両方とも正確に同じものにコンパイルされますが、後者ははるかに読みやすく、不必要なコード行を省略します。

+0

あなたの答えをありがとう。 – Deva

0

入力が少なくて済み、不要なコードが削減されるため、2番目の方が適しています。できるだけ読みやすいコードにしてください。

1

私は、コンパイラが最初のものになるので、最適化すると思います。それはすべてのことではありませんが、ほとんどの場合そうなります。しかし、それはすべて可読性に依存します。どんなに速く捉えることができようとも、私はそれに固執します。しかし、どちらも同じです。その文字列へのポインタの変数を作成しているので、不要なメモリを無駄にしてしまいます。しかし、やはり、コンパイラはおそらくその場合に最適化するでしょう。

+0

andyコンパイラは、常にケース1の不要なメモリの「無駄」を処理します。 – Deva

+0

「無駄」とは何ですか? 'data'は参照のみです。最悪の場合、それは数バイトであり、あなたが考えるべきことは何もありません(あなたのコンパイラがそれについて考えるようにしてください;人間ができるように、これはずっと優れています)。 – Anthales

+0

いいえ、私が言ったように、すべてのものではありません。 Javaはそれにはかなり優れていますが、すべての事やすべての事例には関係しません。だから、本当にあなたが特定のことをいつ行うのかを確かめること。 @ twain249は、使用されないときには、何かのローカルコピーを作るのは何を意味するのだろうと言った。スピードやパフォーマンスが大したことでなければ、わかりやすく、個人的な好みの面で傷ついていません。 – Andy

1

これはほぼ完全にスタイルになります(最初のものは泥だらけのスタイルなので、使用しないものは作成しないでください)。良いコンパイラは、未使用のローカル変数を取り除くことでここにいくつかの最適化があることに気付くでしょう。 「最適化」と見なされるマイナーな調整に巻き込まれるのは本当に簡単ですが、開発者が賢明で無駄な時間を感じるような試みです。たとえコンパイラが第1のコードセグメントを第2のコードセグメントに最適化しなかったとしても(実際にはさらに最適化される可能性があります)。

パフォーマンスに関しては、大きな画像とアーキテクチャの決定は、未使用の割り当て/割り当て操作ではなく、実際に違いを生み出すものです。行ごとの最適化に悩まされないでください。コンパイラに最適化された方がよいでしょう。

+0

あなたの答えに感謝します。 – Deva

0

+1です。あなたが書くことが少ないほど、あなたはより良い開発をします!

+1

「書くことが少ないほど、より良い」...これらの難解なコンテストを見たことはないと思う。 – Anthales

+1

ハハ、そうですね、ちょっと極端です。 *あなたが書いた数が少なくても(それでも十分ではないがまだ分かり易いものがあれば)、より良い開発をすることができます!* :) – sp00m

0

first 1:

がきちんとして、より理解しやすいコードを書くの側に良いですが、それは、コンパイラはとにかくfirstに切り替わりますSringオブジェクト を初期化するにmemory以上を使用し、第二に、他の開発者彼はdebugする必要がある場合、彼は編集したい、彼は最初の初期化の下で直接コードを追加することができますそれも良いです。
コード管理に適しています。

second 1:

には、追加のオブジェクトの初期化が存在しないところperformanceに優れているのが、ちょうど必要な戻りデータをoutputing。しかし、それはコード作成の点では良い習慣ではありませんが、コードを記述する際のパフォーマンスと迅速さという点で優れています。

+1

'しかし、コード作成に関しては良い練習ではありません。いいえ –

+0

コンパイラは、とにかく最初に切り替えます。第2に、他の開発者が編集したいときは、コード管理に適した最初の初期化の直後に直接コードを追加できます – GingerHead

0

最初の方がより直観的になることがあります(大学では、なぜ、私はあなたがこのことについて疑問を持っていると思っているのです)。例外を学習してデバッグするだけですが、より良い。

関連する問題