Javaに切り替える必要があるかもしれません。主にC#を研究して使用してきたため、Javaに関する知識はほとんどありません。これら2つの言語の違いを恐れています。/platformは私に多くの問題を引き起こす可能性があります。
私が気にする必要のある落とし穴/落とし穴はどれですか?
ここにいくつかの重要なJava C#から来るときの落とし穴があります:
switch
のケースが静かに次のケースにフォールスルーする可能性があるため、適切な場合は常にbreak
を常に指定してください。また、Javaではswitch
でString
を実行できません。List<int>
_はなく、_List<Integer>
_のみです。自動ボックス化は冗長性を隠しますが、NullPointerException
をボックス化解除するときにnull
を取得できます。また、2つのボックス化されたプリミティブ型の_==
_および_!=
_は、参照比較を実行します。String
など)の_==
_および_!=
_は常に参照比較であるためint
はInteger
にオートボックス化できます。 _int[]
_から_Integer[]
_へのオートボクシングはありません。byte
、short
、int
、long
は署名のみされています。意図しない符号拡張に注意してください。sub*
_範囲クエリメソッドは、包括的下限と排他的上限を使用します上記のいくつかのトピックについて:
new Integer(i) == i
が保証されていますか? (はい!)==
_/_!=
_を使用)で2つの整数を比較すると、自動アンボックス化が発生しますか? (NO! )int num = Integer.getInteger("123")
がNullPointerException
をスローする理由 (!!!)一般的にJava gotchas:
明らかな落とし穴の1つは、Java style string1.equals(string2)
ではなく、C#スタイル_string1 == string2
_(Javaは参照のみを比較する)で文字列を比較することです。
もう1つは、private
がC#のデフォルトのアクセス修飾子、Javaのpackage
がデフォルトのアクセス修飾子であることです。
また、ToString()
メソッドは、Javaの現在のカルチャによって自動的にローカライズされません。
Javaサブストリング 引数はbeginIndex、endIndexでしたが、 C#Subtring 引数はstartIndex、長さです。それはそれを煩わしいものにするのに十分な違いであり、どちらの方法で切り替えてもインデックスが範囲外になる可能性が高くなります。
うーん。
最大の落とし穴は仮定 Java言語とライブラリはC#での見た目が似ているものと同じように動作することです。チュートリアルを実行し、javadocsを読んで、想定しない...
もう1つのメタ落とし穴は、Java equallyでC#でできる/できるように/簡単にできる)という事実を想定することです。 。Javaははるかに古い言語であり、間違いがありました...
そして最後のメタ落とし穴はthinkが欠落しているものについて不満/ Java on SO思いやりのある/支持的な応答!
デフォルトのアクセス修飾子の違いに注意してください。また、Javaのすべての非静的メソッドは仮想メソッドであることに注意してください(最終としてマークしない限り)。
少し古くなっていますが、これは素晴らしいリファレンスであることがわかりました。
どのようなプログラムに取り組んでいるかによります。ウィキペディアにはこの記事があり、非常に広範です。 (最後の「外部リンク」セクションも確認してください) http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp 。
また、C#からJava http://www.25hoursaday.com/CsharpVsJava.html に切り替えたときにもこの記事を読んだので、とても役に立ちました。
あなたの質問は主観的だと思います。ここではすべてを説明することはできません。 Java Puzzlers、By Joshua Bloch and Neal Gafter
を読むことをお勧めします。あなたはもっと学び、落とし穴から安全になることができます。