新しいプロジェクトではJavaに切り替えなければならない場合があります。私はJavaについてほとんど知識がありません。私は主にC#を研究して使用しており、これら2つの言語/プラットフォームの違いが多くの問題を引き起こす可能性があることを恐れています。
私が気にする必要がある落とし穴/落とし穴はどれですか?
新しいプロジェクトではJavaに切り替えなければならない場合があります。私はJavaについてほとんど知識がありません。私は主にC#を研究して使用しており、これら2つの言語/プラットフォームの違いが多くの問題を引き起こす可能性があることを恐れています。
私が気にする必要がある落とし穴/落とし穴はどれですか?
回答:
C#からのJavaの落とし穴は次のとおりです。
switch
ケースが静かに次へとフォールスルーする可能性があるため、break
適切な場合は常に置くようにしてください。また、Javaでswitch
オンString
にすることもできません。List<int>
、のみList<Integer>
。自動NullPointerException
ボックス化は冗長性を非表示にしますが、をボックス化解除すると取得できますnull
。また、==
そして!=
2つの箱入りプリミティブ型の参照比較を行います。
==
および!=
2つの参照型(たとえば上でString
常に参考比較されています)int
にautoboxedすることができますInteger
。からint[]
へのオートボクシングはありませんInteger[]
。byte
、short
、int
、long
のみ署名されています。意図しない符号拡張に注意してください。sub*
範囲クエリメソッドは、包括的下限と排他的上限を使用します
上記のいくつかのトピックについて:
new Integer(i) == i
はJava で保証されていますか?(はい!)==
/を使用!=
)、自動アンボックス化は発生しますか?(番号!)int num = Integer.getInteger("123")
投げるのNullPointerException
?(!!!)一般的なJavaの落とし穴:
明らかな落とし穴の1つはstring1 == string2
、JavaスタイルではなくC#スタイル(Javaは参照のみを比較する)で文字列を比較することstring1.equals(string2)
です。
もう1つは、Javaのprivate
C#のデフォルトのアクセス修飾子ですpackage
。
また、ToString()
メソッドはJavaの現在のカルチャによって自動的にローカライズされません。
私を得たものは、Javaの部分文字列の引数がbeginIndex、endIndexであるのに対し、C#のSubtringの引数はstartIndex、長さです。それはそれを煩わしくするのに十分な違いであり、どちらの方法で切り替えてもインデックスが範囲外になる可能性は十分にあります。
うーん。
デフォルトのアクセス修飾子の違いに注意してください。また、Javaの非静的メソッドはすべて仮想であることに注意してください(最終メソッドとしてマークしない限り)。
少し古くなっていますが、これは素晴らしいリファレンスであることがわかりました。
Also note that all non-static methods in Java are virtual.
C#もこのようにしたいと思います
どのようなプログラムに取り組んでいるかによります。ウィキペディアにはこの記事があり、非常に広範です。(末尾の「外部リンク」セクションも確認してください)http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp。
また、C#からJava http://www.25hoursaday.com/CsharpVsJava.htmlに切り替えたときにこの記事を読んだので、とても役に立ちました。
Java言語では、int、charなどのプリミティブ型に相当する客観的なものは「値型」ではありません(たとえば、整数は参照型です)。C#では、System.Int32は構造体です。