2010-12-14 22 views
5

私はJavaプログラミングを実行するためにeclipse java eeを使用しています。 Java:long result = -1:intからlongに変換できません

は、私は私の機能の一つに次のコード行を持っていた:

Long result = -1; 

I次のエラーました:私はに番号を追加するとき

Type mismatch: cannot convert from int to Long

私はかなり理由を理解することはできませんがこのエラーを提供する変数。

この問題を解決するにはどうすればよいのでしょうか?なぜ最初にこの問題が発生しましたか?

答えて

15

オブジェクトLongintの間に変換がないので、longにする必要があります。 Lを追加すると、long-1L)に整数-1を行います

Long result = -1L; 

しかしlongintからの変換があるので、これは動作します:

long result = -1; 

したがって、あなたがこのaswellのように書くことができます。

Long result = (long) -1; 

プリミティブ(intlongなど)をラッパーオブジェクト(IntegerLongなど)に呼び出すことをオートボクシングと呼びます。詳細はhereを参照してください。

+5

+1、および大文字するために、その重要。 '-l'は' -11'のように見えます:) – Bozho

0

、タイプlongの定数を指定Lとサフィックスをする:

Long result = -1L; 

Lなければ、インタープリター・タイプlongと同じタイプではないintとして一定数を、。

1
Long result = -1L; 
4

-1を整数に自動ボックスすることができます。したがって

Integer result = -1; 

作品と同等です:

Integer result = Integer.valueOf(-1); 

しかし、整数はロングに割り当てることができないので、問題の全体的な変換が失敗します。

Long result = Integer.valueOf(-1); 

も機能しません。

あなたが行う場合:それは(再びので、オートボクシングの)同等だ

Long result = -1L; 

へ:Lはそれがlongリテラル作ること

Long result = Long.valueOf(-1L); 

注意。

2

まずJavaのバージョンを確認してください:コマンドラインから "java -version"を実行してください。前1.5 Javaバージョンで

、正しい構文は次のとおり

ロング結果=新しいロング(1L)。

java> 1.5では自動的に行われます。それは「オートボクシング」と呼ばれています。

大文字の "L"は、Javaに数値をlongと解釈する必要があることをJavaに通知します。それが最初の場所で起こったのか

+2

'Long.valueOf(1L);'は 'new Long(1L);'よりも優れています。詳細については、 'Long.valueOf(long)'のAPIドキュメントを参照してください。 – Jesper

+0

小文字の「l」もそうです。 – EJP

1
Long result = -1L; 

Long result = (long) -1; 

Long result 
    = Long.valueOf(-1); // this is what auto-boxing does under the hood 

リテラル-1intであるということです。 Java5では、Objectとして使用するとIntegerに自動ボックス化されますが、Longlongのみ)にはなりません。

long result = -1; // this is okay 

逆の方法は、明示的なキャスト必要があります:必要なときにintは自動的に長いに広がっていることを

int number = (int) result; 
1

-1はプリミティブなint値であるが、Longしかしありますラッパークラスjava.lang.Long。プリミティブな整数値をLongオブジェクトに割り当てることはできません。これを解決するには2つの方法があります。あなたはプリミティブ型long JavaへのラッパークラスLongからタイプを変更した場合

  1. 変更long

    のタイプが自動的にlong値に整数値をキャストします。長い

    long result = -1;

  2. 変更int型の値、あなたはそれは長いリテラルのJavaへの明示的な変化に-1から-1Lに整数値を変更した場合は、自動的にjava.lang.Longにこの値をラップするために、このプリミティブな値を使用することができますオブジェクト。

    Long result = -1L;

関連する問題