2010-12-14 5 views
5

Ich benutze Eclipse Java EE, um Java-Programmierung durchzuführen.Java: Langes Ergebnis = -1: Kann nicht von int in Lang konvertieren

Ich hatte die folgende Codezeile in einer meiner Funktionen:

Long result = -1; 

Ich habe folgende Fehlermeldung:

Type mismatch: cannot convert from int to Long

Ich kann nicht ganz verstehen, warum, wenn ich eine Nummer hinzufügen die Variable, die diesen Fehler liefert.

Wie kann dieses Problem gelöst werden und warum ist es in erster Linie passiert?

Antwort

15

Es gibt keine Konvertierung zwischen dem Objekt Long und int, so dass Sie es von long machen müssen. macht die ganze Zahl mit einem L Hinzufügen -1 in ein long (-1L):

Long result = -1L; 

jedoch eine Umwandlung von int ist ein long so funktioniert das:

long result = -1; 

Daher können Sie diese als gut schreiben:

Long result = (long) -1; 

Umwandlung von einem Primitiv (int, long etc) zu einem Wrapper-Objekt (Integer, usw.) heißt Autoboxing, lesen Sie mehr here.

+5

+1, und es ist wichtig groß geschrieben werden. '-1l' sieht wie' -11' aus :) – Bozho

0

Um eine Konstante vom Typ long, Suffix es mit einem L angeben:

Long result = -1L; 

Ohne die L, die Interpreter-Typen die konstante Zahl als int, die nicht vom gleichen Typ als long ist.

1
Long result = -1L; 
4

-1 kann zu einem Integer automatisch eingereiht werden.

So:

Integer result = -1; 

Werke und ist äquivalent zu:

Integer result = Integer.valueOf(-1); 

Jedoch kann ein Integer nicht auf eine lange zugewiesen werden, so dass der Gesamtumsatz in der Frage ausfällt.

Long result = Integer.valueOf(-1); 

wird auch nicht funktionieren.

Wenn Sie das tun:

Long result = -1L; 

es gleichwertig ist (wieder wegen der Auto-Boxen) zu:

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

Beachten Sie, dass die L es wörtliche ein long macht.

2

Zuerst überprüfen Sie Ihre Java-Version: Führen Sie "java -version" von der Befehlszeile aus.

In Java-Version vor 1.5, die korrekte Syntax ist:

Lange Ergebnis = new Long (1L);

In Java> 1.5 ist es automatisch getan. Es heißt "Autoboxing".

Der Großbuchstabe "L" teilt Java mit, dass die Zahl so lange interpretiert werden soll.

+2

'Long.valueOf (1L);' ist besser als 'new Long (1L);', weil es Ihnen ein Objekt im Cache geben kann. Weitere Informationen finden Sie in der API-Dokumentation von 'Long.valueOf (long)'. – Jesper

+0

So ist der Kleinbuchstabe 'l'. – EJP

1
Long result = -1L; 

Long result = (long) -1; 

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

Wie es in erster Linie passiert ist, dass die wörtliche -1 ein int ist. Ab Java5 können Sie es automatisch in ein Integer einbetten lassen, wenn Sie es als Object verwenden, aber es wird nicht in ein Long umgewandelt (nur long s sind).

Beachten Sie, dass ein int automatisch in eine lange erweitert wird, wenn nötig:

long result = -1; // this is okay 

Die entgegengesetzte Art und Weise muss eine explizite Umwandlung:

int number = (int) result; 
1

-1 ist ein primitiver int Wert, Long jedoch ist die Umhüllungsklasse java.lang.Long. Ein primitiver ganzzahliger Wert kann keinem Long-Objekt zugewiesen werden. Es gibt zwei Möglichkeiten, dies zu lösen.

  1. Ändern Sie den Typ long

    Wenn Sie den Typ aus der Wrapper-Klasse Long zum Urtyp long java ändern wirft automatisch den Integer-Wert zu einem Long-Wert.

    long result = -1;

  2. Ändern Sie den int-Wert zu lange

    Wenn Sie den ganzzahligen Wert von -1 zu -1L auf explizite Änderung ändern Sie es zu einem langen wörtlichen Java können diesen Grundwert verwenden automatisch diesen Wert auf eine java.lang.Long einzuwickeln Objekt.

    Long result = -1L;

Verwandte Themen