menu
書いてる野郎
orebike@gmail.com
ダブルクォートでくくる
String hoge = "ほげ";
記号 | エスケープ後 | |
---|---|---|
“ | \” | ダブルクォート 通常の““で挟んだ時 |
” | ”“ | ダブルクォート @”“で挟むヒアドキュメントのときは”“で重ねる |
アットマーク改行に続いて書けば複数行の文字列リテラルが作れる
String hoge = @" なにか なにか なにか ";
+
で結合できる
String hoge = "aaa" + "bbb";
変数を後入れする方法
String piyo = "ぴよぴよ" String hoge = "ほげ" + piyo + "ほげ";
こうじゃなくて、こうできる
String piyo = "ぴよぴよ" String hoge = String.Format("ほげ{0}ほげ{1}", piyo, piyo); // hoge は 「ほげぴよぴよほげぴよぴよ」
int hoge = int.Parse("123");
こうだな
String hoge = "ほげ"; if(String.Equals(hoge, "ほげ")){ //一致ならここ }
==
演算子で比較可能・・・な感じがするが・・・ 可能
String hoge = "ほげ"; if(hoge == "ほげ"){ //一致ならここ }
っで・・・Javaみたいな
String hoge = "ほげ"; if(hoge.Equals("ほげ")){ //一致ならここ }
こいつもたしかに一致するんだな これはイミュータブル(変更不可能)オブジェクトでよくある実装手法。
同じオブジェクトの集まりをあらかじめ保持しておく、これをインターンプールとか言う。 同じ内容のオブジェクトがnewされたらその保持しているオブジェクトのポインタを割り当てるということを裏でやる。デザインパターンで言うとフライウェイトパターンかな。これでnewするコストが下がる
なので同じ文字列ならば、同じポインタが割り当てられている可能性が高くなるのでこの比較でも一致する
リテラルではなく、new演算子で作られたオブジェクトはプールにはいらないらしく hoge.Equals
の比較ではミスる。つまりコンパイル時の最適化で判定しているのであって、実行時の仕組みではないということ
他にもいくつか入らないパターンがあるようなので ==
で比較しておいたほうが安全
↓ここにも似たようなことが書いてあった。 C# では文字列の比較に Equals を使うな
これはほぼ.NET Frameworkに依存するので正規表現と同じです。
C# Programming http://uchukamen.com/Programming/Strings/Strings.htm