アプリ版:「スタンプのみでお礼する」機能のリリースについて

 今晩は、java初心者です、宜しくお願いします。
 
 Integerクラスについて下のように「i1 = new Integer("1");」と書いても「i2 = new Integer(1);」
と書いても、どちらも数字として認識されているようです。
 正式な書き方としてはどちらなんでしょうか、宜しくお願いします。

=========================================================================

public class Test1
{
public static void main(String[] args)
{
Integer i1 = new Integer("1");
System.out.println((i1+2));

Integer i2 = new Integer(1);
System.out.println((i2+3));
}
}

A 回答 (3件)

> 正式な書き方としてはどちらなんでしょうか、宜しくお願いします。


……えーと、あなたが言う「正式」とはどういう意味でしょうか。

Integer には int を引数とするコンストラクタと String を引数とするコンストラクタの両方が定義されています。両方が定義されている以上、どちらを使っても構わないのです。

どちらをよく使うかという意味で聞いているのであれば、それはプログラムの処理内容で違ってきます(たとえば CSV ファイルから数値を読み込む場合は String からのほうが便利ですし、計算結果をコレクションに格納するときには int からのほうが使われています)。

しいて言うならば、両方の書き方が可能であると定義されているので、両方とも正式な書き方と私は考えます。
    • good
    • 0

質問の答えとしては、どちらも正式という事になります。


というか、コンストラクタを含め公開されているメソッドに正式/非正式の区別は特にありません。非推奨の場合はありますが。

ただし、Integer オブジェクトの取得については Integer.valueOf(int) や Integer.valueOf(String) を使った方が実行速度やメモリの利用効率が良くなる場合がありますので、新しいインスタンスを作る必要が特に無ければ、それらを使った方が良いでしょう。
http://docs.oracle.com/javase/jp/6/api/java/lang …

Integer i1 = Integer.valueOf("1");
Integer i2 = Integer.valueOf(1);


なお、引数が int のものと String のもののどちら使うかに関しては、基本的には必要に応じて使い分ければ良いのですが、引数がリテラル(「1」「"2"」などの値そのもの)の場合はなるべく int の方を使ったほうが良いでしょう。
String が引数の場合は符号や数字以外の文字が含まれていてもコンパイルエラーにならないので、パッと見て分かりづらい下記の様なバグを作りこむ可能性がありますので。

Integer.valueOf("l0"); // 実はエルとオーなので実行時エラーになる
    • good
    • 0
この回答へのお礼

 root139さん、有難う御座いました。

お礼日時:2012/12/09 15:41

Integerクラスのリファレンスマニュアルはこちら。


http://docs.oracle.com/javase/jp/6/api/java/lang …

このコンストラクタには,引数としてint値もString値もどちらも渡せますから,どちらも正式な書き方です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!