JavaでintからLongに変換するにはどうすればよいですか?


219

私はここで両方を見つけると、Googleの人々が行くからトラブル持つ維持longint他の方法の周りとされていません。しかし、私は私がから行く前に、このシナリオに遭遇しただけではないんだと確信しているintLong

私が見つけた他の唯一の答えは、「最初からそれをLongに設定するだけ」でしたが、これは実際には質問に対応していません。

最初はキャストを試しましたが、「Cannot cast from int to Long」が表示されます

for (int i = 0; i < myArrayList.size(); ++i ) {
    content = new Content();
    content.setDescription(myArrayList.get(i));
    content.setSequence((Long) i);
    session.save(content);
}

私が少し困惑していることを想像できるようにint、一部のコンテンツがとして入って来て、ArrayListこの情報を格納しているエンティティがシーケンス番号としてLongを必要とするので、私は使い物になりました。


for(long i = 0; i <myList.size(); ++ i)も機能します
Instantsoup

@Instantsoupはい、ループで機能しますが、質問の最後で指定したように、操作するArrayListには、取得するインデックス位置を指定するときにプリミティブintが必要です
Ghosty

long longValue = intValue | 0L;
Daniel Jipa 2017年

私がやったことです:キャストintlongまず、[割り当てlongLong。例int x = 2; Long y = (long)x;
Eric Wang

回答:


244

キャスト先longとキャスト先には違いがあることに注意してくださいLonglong(プリミティブ値)にキャストすると、自動的にLong(それをラップする参照型)にボックス化されます。

または、を使用newしてのインスタンスを作成Longし、int値で初期化することもできます。


31
Earwickerが言ったことを示すために、Long.valueOf(i)を呼び出すことができます。これは時間がかかりますが、intを広げてLongオブジェクトを返します。
Grundlefleck 2009

1
オートボクシングは、Long毎回新しいオブジェクトを作成する必要がないため、望ましい方法です。
マイケルマイヤーズ

2
(警告:このコメントの残りは当て推量と推測です)Long.valueOf()に指定された値が0から128の範囲にある場合(これは非常に一般的です)、キャッシュされたインスタンスを返す場合、オートボクシングよりも望ましいでしょうか?(あなたがそれが価値があると思うなら、私は新しい質問をするかもしれません...)
Grundlefleck 2009

4
オートボクシングはそれと同じことを行います。ちなみに、それは-127と128の間です
ダニエルエリカー

6
@Grundlefleck:オートボクシングはLong.valueOf()(私が正しく覚えていれば)使用するので、まったく違いはありません。私のコメントはあなたのコメントではなく回答への返信でした。
マイケルマイヤーズ

193

次を使用しますLong.valueOf(int);


5
nullのIntegerオブジェクトを受け取っている場合は、NullPointerExceptionが生成されるので注意してください。
will824

2
私が方法を見つけることができないので、私が答えが古いかもしれないと思った場合は正しいですLong.valueOf(int) !!
shareef

5
@ will824-プリミティブな「int」変数をnullにすることはできません。
ロンド

1
@shareef-sergのコメントを参照-しかし、このメソッドはintをlongにキャストするlongにオートボックス化するので、冗長であるように見える
Rondo

1
@Rondo Integer缶、それは彼が言ったことです。
モイラ2017

17

あなたがすでにint型をIntegerとしてタイプしているなら、これを行うことができます:

Integer y = 1;
long x = y.longValue();


6

私はこの小さなおもちゃを持っています、それはまた、非一般的なインターフェースを扱います。フィードが間違っている場合はClassCastExceptionをスローして問題ありません(OKで満足)

public class TypeUtil {
    public static long castToLong(Object o) {
        Number n = (Number) o;
        return n.longValue();
    }
}

6

Javaでは次のことができます。

 int myInt=4;
 Long myLong= new Long(myInt);

あなたの場合は次のようになります:

content.setSequence(new Long(i));

6

どのように

int myInt = 88;

//コンパイルしません

Long myLong = myInt;

//コンパイルして、intの非NULL精神を保持します。最高のキャスト全くキャストではありません。もちろん、ユースケースによっては、長くて可能なNULL値が必要になる場合があります。しかし、intまたは他のlongが唯一の入力であり、メソッドを変更できる場合は、このアプローチをお勧めします。

long myLong = myInt;

//コンパイルは最も効率的な方法であり、ソース値がNULLであることは決してないことを明確にします。

Long myLong = (long) myInt;

3

Number参照を使用してlong値を取得します。

public static long toLong(Number number){
    return number.longValue();
}

これはすべての数値タイプで機能します。ここにテストがあります:

public static void testToLong() throws Exception {
    assertEquals(0l, toLong(0));   // an int
    assertEquals(0l, toLong((short)0)); // a short
    assertEquals(0l, toLong(0l)); // a long
    assertEquals(0l, toLong((long) 0)); // another long
    assertEquals(0l, toLong(0.0f));  // a float
    assertEquals(0l, toLong(0.0));  // a double

}


2

私はこれに多くの問題を抱えていました。私はただしたかっただけです:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

IntervalCountがLongで、JSpinnerがLongを返すように設定されている場合。最終的に私はこの関数を書かなければなりませんでした:

    public static final Long getLong(Object obj) throws IllegalArgumentException {
    Long rv;

    if((obj.getClass() == Integer.class) || (obj.getClass() == Long.class) || (obj.getClass() == Double.class)) {
        rv = Long.parseLong(obj.toString());
    }
    else if((obj.getClass() == int.class) || (obj.getClass() == long.class) || (obj.getClass() == double.class)) {
        rv = (Long) obj;
    }
    else if(obj.getClass() == String.class) {
        rv = Long.parseLong(obj.toString());
    }
    else {
        throw new IllegalArgumentException("getLong: type " + obj.getClass() + " = \"" + obj.toString() + "\" unaccounted for");
    }

    return rv;
}

トリックを行うようです。単純なキャスティングはありません。上記の解決策はどれも私にとってはうまくいきませんでした。とてもイライラします。


1
jPaidCountSpinner.getValue()実際にa Longであるオブジェクトを返す場合は、(Long)キャストを前に置くだけで十分です。また、あなたのチェックにブレークポイントを入れてみint.classたりlong.class、それは今までそれを打つんなど?そして、数値のようなオブジェクトがある場合、それはをサポートするjava.util.Numberので、それにキャストしてlongValueメソッドを呼び出します。その場合、文字列を経由する必要はありません。したがって、文字列も処理する必要がある場合でも、この関数はかなり簡略化できます。(ここでの問題の一部は、の不適切なリファレンスドキュメントですJSpinner)。
Daniel Earwicker、2011年

1
私もこのようなことをすることになりました。どのような数値を受け取るかわからなかったので、効率をほとんど考慮せずにボイラープレートを避けたいので、それをLongに変換するつもりでした。
プロフィッテロール


0

メソッドしかない場合は、を使用すると暗黙的にtoへのLong.valueOf(long)キャストが行われます。intlongLong.valueOf(intValue)

これを行うためのより明確な方法は

Integer.valueOf(intValue).longValue()

longValueは単なるな(long)ので、ここで「取得」できるのはIntegerの内部キャッシュだけです。
マーティン・シュローダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.