• ベストアンサー

javaとC#のStringの違い

javaだと、Equals()を使わないとStringの比較ができないのですが、C#だとEquals()も==も使えます。 これはなぜでしょうか? C#では、Stringも基本データ型なのでしょうか?それとも中間言語にコンパイルされる際に==をEquals()に変換されているのでしょうか?

  • Java
  • 回答数2
  • ありがとう数9

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

どちらでもなく、== という演算子が String に対して定義されています。内部的には静的版の Equals() を呼び出しているようですが。 http://msdn.microsoft.com/ja-jp/library/system.string.op_equality(v=vs.110).aspx C# には Java にはない演算子のオーバーロードという機能があります。 http://msdn.microsoft.com/ja-jp/library/ms228498(v=vs.90).aspx

satisfied999
質問者

お礼

演算子のオーバーロード!そんなことができるのですね!

その他の回答 (1)

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.2

>>javaだと、Equals()を使わないとStringの比較ができないのですが、C#だとEquals()も==も使えます。 これはなぜでしょうか? 個人的な見解ですけど、C#はマイクロソフトが言語仕様を自由に拡張できる言語だと思っています。つまり、C#利用者が「この文法は不便だなあ」とか「こんな文法があれば便利だ」って思えば、それが可能になるように、マイクロソフトがどんどんとC#の仕様を拡張することができたということだと思っています。特にラムダ式の導入、varキーワード、匿名型など、.Net Frameworkの拡張、VisualStudioの拡張の相乗作用で、プログラミングが凄く楽になってきていると思います。 それに対して、Javaの言語仕様は、いろんな団体とかのしがらみがあって、そんなに勝手に変更・拡張できないからではないかと思います。また、そういう拡張がC#よりもJavaは難しいのではないか?という気も個人的には思っています(本当かどうかわかりませんが・・・)。

関連するQ&A

  • C#で char型とstring型の比較で Equalsでハマりました。 

    C#で char型は値型でstring型は参照型ですがこの比較を正しく行うにはどうしたらよいでしょうか? string s = "0123456789"; Console.WriteLine(s[0]); Console.WriteLine("0".Equals(s[0]) ? "true" : "false"); で、falseなのは驚きでした。 Equalsを鵜呑みにしていました。 コンパイルできたので今まで気づきませんでした。 詳しい方、教えて頂けますか?

  • C# stringとSystem.String違い

    C#のstringとSystem.Stringこの2つの違いが分かりません。 どのような時に使い分けをすれば良いのでしょうか。 そもそも別のものなのでしょうか? > stringは、C#のネイティブなデータタイプです。ただし、すべての基本タイプと同様に、stringは、実際には.NETライブラリのタイプの別名です。この場合はSystem.Stringです。 > http://www15.ocn.ne.jp/~sunsan-k/sunsank.files/sunsan/d-net/Csharp_index/Chap2/C2-19.html ここに書いている意味はstringとSystem.Stringは同じという意味なのでしょうか?

  • JNI C言語からjava

    お世話になります。 JNIでC言語からJAVAを呼び出したいのですがやり方が分からないので教えて下さい。 【呼び出されるJAVA側のソース】 public class JniTest { public String GetXX(String P1, String P2) { String R = P1 + P2; return R; } } 上記をC言語から呼び出して結果を表示したいのですが、どのようにコーディングしたら良いのか分かりません。 色々探してみたのですがギブアップです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • C言語からjavaを呼び出したい

    C言語からjavaを呼び出したいのでjniを使うことにしました。 各言語のソースはWebで見つけたサンプルを見ながら何とか作成し、各々コンパイルまで終わったのですが、javaのオブジェクト(?)をどこに置いたら良いのかさっぱりわかりません。 java使いの人達には常識の話だと思いますがjavaはサーブレットしか作ったことが無くどうしたものかと困っています。 分からないのは次の2点です。 1.classファイルのままでも良いのかjarにしないといけないのか? 2.どこに設置したら良いのか? これまでやったこと 1.javaのソースを作成しコンパイルしました(classファイルのままです) 2./etc/profileに次のコマンドを追加しました。 LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/java/jdk1.7.0_03/jre/lib/amd64/server export LD_LIBRARY_PATH 3.C言語のソースを次のコマンドでコンパイルしました。 % gcc -I/usr/java/jdk1.7.0_03/include/ -I/usr/java/jdk1.7.0_03/include/linux -L/usr/java/jdk1.7.0_03/jre/lib/amd64/server -ljvm -lpthread jnitest.c -o jnitest 4.javaモジュールの設置←これがわかりません 初歩的な質問で申し訳ありませんがご教示下さい。

    • ベストアンサー
    • Java
  • javaのmainの引数はなぜstring[]?

    Java初心者です。 基礎的なことなのですが、質問させてください。 javaのmainメソッド定義の public static void main (String[] args) について、String[] argsの部分がjavaコマンドで実行する際に与える引数であることは 理解できました。しかし、なぜStringの配列なのかが理解できません。 実行時の引数であれば、intやdoubleも使い道があるようにも感じるので、 プログラマの好きに定義できた方が便利な気がしますし、実行時に引数を与えないなら public static void main () としてしまったほうがわかりやすいとも感じてしまいます。 実はコンパイル時や実行時に裏の見えない部分でStringの配列を使っているとか、 何か理由があるのでしょうか? mainの定義は main (String[] args)と暗記でもいいのですが、 気になったので知りたく、質問させてください。

    • ベストアンサー
    • Java
  • JavaプログラムをC++へ変換したい

    JavaプログラムをC++とC言語に変換したいのですが変換ツールなどはありますか? ... JavaプログラムをC++とC言語に変換したいのですが 変換ツールなどはありますか? ご存知の方教えてください。 よろしくお願い致します。 下記の2つを試みたのですが、設定方法がわからずにできませんでした わる方いましたら、努力しろといわれるかもしれませんが解説お願いします。 Toba: A Java-to-C Translator http://www.cs.arizona.edu/projects/sumatra/toba/ Janus http://www.java-conf.gr.jp/event/grandprix/97/sakuhin/T/TI3970/

  • C#におけるstringとstring[]データの変換

    お世話になります。C#をはじめて使っています。 いま行おうとしているのがコモンダイアログからファイル名を取得して、CSVファイルを読み出そうとしています。 OpenFileDialogから出力されるファイル名はstring[]と配列になり(すいません、C#でも”配列”といっていいのですよね?) CSVを開くためのTextFieldParserの引数はstringになります。Cならポインタで変換できるのですが、C#はポインタがないため、いくつか試しましたが、うまく変換でききませんでした。 たとえば string a; string[] b: で  a=b; a=(string)b; a=convert.tostring b; 全部だめでした、どなたかご存知の方お見えになれば教えていただけると助かります。

  • char型とstring型について

    char型とstring型について質問があります。 言語はC++です。 以下の関数があったとします。 void test(string a, string b string c){ 処理 } この関数を下記のように利用した場合について質問があります。 a.引数に直接文字列を挿入したケース test("aaa","bbb","ccc") b.変数に文字列を設定し、変数を引数にしたケース string a="aaa" string b="bbb" string c="ccc" test(a,b,c) (1)はコンパイルエラーになり、(2)は成功しました。 同じ様に見えるのですが、何が違うのでしょうか? また、関数の引数の型をchar*にした場合、(1)(2)のケースでコンパイルが通りました。char*型だと何が違うのでしょうか?

  • C言語とJavaの違い

    C言語とJavaの違いの1つとして間違えていたら教えて下さい。 「C言語はコンパイル時に環境に応じて異なるモジュールが作成される危険性がでる場合があるのに対して、JavaはJavaVMという処理系でプラットフォームの違いを吸収されるので、JavaVMが搭載されていればどの環境でもJavaプログラムは動かすことができるでよいのでしょうか?」

    • ベストアンサー
    • Java
  • [C#] string name = new ..

    こんにちは。 string name; name = "sukeken"; これを、オブジェクト指向プログラミングらしく string name = new string("sukeken"); とするのは、ダメなのでしょうか? コンパイルは、許してくれないようなのですが…。 同じように、intもダメでしょうか? 環境 VisualStudio2012 C# よろしくお願いいたします。