Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

C#から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

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村