[解決済み】C#とJavaの大きな違いは何ですか?
2022-04-20 02:15:50
質問
1つだけはっきりさせておきたいことがあります。これはどちらが優れているかという質問ではなく、その部分は他の方の議論にお任せします。私は気にしない。 面接でこの質問をされたので、ちょっと勉強になるかなと思って。
思いつくのはこんな感じです。
- Javaはプラットフォーム非依存です。まあ今で言えば モノ C#も同じように考えることができますが ちょっと大げさだと思うのですが。なぜか?一方、C# 3.0はMonoの実装にどれだけの機能が欠けているのでしょうか。それとも、本当に CLR vs. 日本原子力研究所 ここで比較すべきは?
- Javaはイベントとデリゲートをサポートしていません。私の知る限りでは。
- Javaでは、すべてのメソッドが仮想です
- 開発ツール。Visual Studioのようなツールはまだないのでは?特にチーム版で仕事をしたことがある人なら、私の言っている意味がわかると思います。
その他、関連すると思われるものを追加してください。
更新しました。 ふと思ったのですが、Javaにはクラスやメソッドなどのカスタム属性のようなものはありません。それともあるのでしょうか?
どうすればいい?
Java 7とC# 3を比較する
(Java 7の一部の機能はここでは触れませんが
using
文の利点は、Java 1-6に対するC#のすべてのバージョンで削除されました)。
まとめがすべて正しいわけではありません。
- Javaではメソッドは仮想 デフォルトで しかし、finalにすることができます。(C#ではデフォルトでsealedですが、virtualにすることができます)。
- Java用のIDEは、無料(例:Eclipse、Netbeans)、商用(例:IntelliJ IDEA)ともにたくさんあります。
その先にあるもの(そして、すでにあなたの要約にあるもの)。
-
Java のジェネリックスは、コンパイル時のトリックにすぎません(ただし、便利なトリックではあります)。C#と.NETでは、ジェネリックスは実行時にも維持され、参照型だけでなく値型に対しても機能し、適切な効率性を維持します(例.
List<byte>
としてbyte[]
を、ボックス化されたバイトの配列ではなく、それをバックアップします)。 - C#にはチェックされた例外がない
- Javaでは、ユーザー定義の値型を作成できない
- Javaには演算子や変換のオーバーローディングがない
- Javaにはイテレータを簡単に実装するためのイテレータブロックがありません。
- JavaにはLINQのようなものはありません。
- デリゲートを持っていないこともあって、Javaには匿名メソッドやラムダ式のようなものはありません。匿名の内部クラスは通常これらの役割を果たしますが、不格好です。
- Javaには式木がない
- C#には匿名インナークラスがない
- C#にはJavaのインナークラスが全くありません。C#のすべてのネストされたクラスは、Javaの静的ネストされたクラスと同じです。
- Javaには静的クラス(このクラスには 任意の インスタンスコンストラクタを使用し、変数やパラメータなどに使用することはできません)
- JavaにはC# 3.0の無名型に相当するものはありません。
- Javaには暗黙のうちに型付けされたローカル変数がありません。
- Java には拡張メソッドはありません
- Javaには、オブジェクトとコレクションのイニシャライザ式がありません。
- Javaには(現在のところ)アセンブリに直接相当するものがないので、quot;internal" visibilityの考え方がありません。C#には、名前空間(と継承)を考慮したJavaのquot;default" visibilityに相当するものがありません。
- JavaとC#では初期化の順番が微妙に違う(C#は変数の初期化子を基本型のコンストラクタの連鎖呼び出しの前に実行する)。
- Javaには言語としてのプロパティはなく、get/set/isメソッドの慣習となっている
- Javaにはquot;unsafe;に相当するコードがありません。
- Java の JNI よりも C# (および .NET 全般) の方が相互運用が容易である
- JavaとC#では、列挙型に対する考え方がやや異なります。Java の方がよりオブジェクト指向的です。
- Javaにはプリプロセッサ指示文(C#の#define, #ifなど)がありません。
-
Javaには、C#の
ref
とout
パラメータを参照渡しする場合 - Javaには部分型に相当するものがない
- C#のインターフェースはフィールドを宣言できない
- Java には符号なし整数の型がない
- Javaには 言語 は10進数型をサポートしています。(java.math.BigDecimalが提供しているのは のように System.Decimal - 違いはあるが - 言語サポートはない)
- Java には null 可能な値の型に相当するものがない
- JavaでのBoxingは、定義済みの(しかしquot;normal")参照型とそれに対する特定の操作を使用します。C#と.NETでのボクシングは、より透明なもので、どのような値型に対してもCLRによってボクシングのための参照型が作成されます。
これは網羅的なものではありませんが、私がすぐに思いつくものはすべてカバーしています。
関連
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersionの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] Stringでswitch文が使えないのはなぜですか?
-
[解決済み] Javaで仮想関数/メソッドを書けますか?