2013-03-12 C#からJavaに触れてつまづきそうになること Java 言語仕様 タイトルがアレですが、言語仕様の優劣比較とかではないです(^^; 仕事の上で、C#(あ、ちなみに私の知識は2.0ですが(^^;)からJavaを書くようになって、たまに「えっ」と思うことがあるのでいくつか備忘として書いておこうかなと。 文字列の連結 C# string str = "hello"; string tail = null; Console.WriteLine(str + tail); 結果は hello Java String str = "hello"; String tail = null; System.out.println(str + tail); 結果は hellonull nullくっついてる(^^; こんなコードはないですが、変数にnull入ったケースはあると思うので注意しないと。 文字列の比較 C# string str1 = null; string str2 = "hi"; if(str1 == str2) Java String str1 = null; String str2 = "hi"; if(str1 == str2) //と書くとNetBeansに注意されます。 ちなみにNetBeansは変換を2択で出してきます。 1つはequalsで書き換えるものですが、str1がnullなので駄目です。 もう1つ自動生成されたのはif(str1 == null ? str2 == null : str1.equals(str2))でした。が、これは毎回書かない気が…(^^;自分の場合はApache CommonsLangを利用して StringUtils.equals(str1, str2) としています。 doubleの計算 C# Console.WriteLine(2.00 - 1.10); 0.9 Java System.out.println(2.00 - 1.10); 0.8999999999999999 金額計算等の精度を求めるものはC#ではdecimal、JavaではBigDecimal使うと思うので問題化しにくいと思いますが(^^) ちなみに元ネタは先日のJJUGナイトセミナーで初めて知った「Java Puzzlers」です。新しいプログラミング言語を学ぶ際には書籍やサンプルコードを読んで学習しますが、やはり実際に書いて「あれ?」「なんで?」とか思いながら実践するのが良いなぁと改めて思います。 他にもまだまだ色々あると思うのですが、とりあえず初歩的なものを書いてみました。 補足: 以下サイトでC#の内部的な動きを確認されています。コメント欄にあるようにtoStringが丸めてるようです。 OPC Diary