web-dev-qa-db-ja.com

JavaでintからLongに変換する方法

私はこことGoogleの人々の両方がlongからintへ行くのに苦労していて、その逆ではないことを発見し続けています。 intからLongに移行するまでに、このシナリオに遭遇したのは私だけではないと確信しています。

私が見つけた他の唯一の答えは、実際には質問に対処していない「そもそも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として入ってきます。

196
Ghosty

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

代わりにnewを使用してLongのインスタンスを作成し、それをint値で初期化することもできます。

227

以下を使用してください。 Long.valueOf(int);

179
serg

あなたがすでに整数として型付けされたintを持っているなら、あなたはこれをすることができる:

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

つかいます

new Long(your_integer);

または

Long.valueOf(your_integer);
10
User User

私はこの小さなおもちゃを持っています。それはまた非汎用インターフェースも扱います。フィードが間違っているとClassCastExceptionがスローされるので問題ありません。

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

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

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

あなたの場合はそれでしょう:

content.setSequence(new Long(i));
4
cloudy_weather

どうですか

int myInt = 88;

//コンパイルしません

Long myLong = myInt;

// NULL以外のintの精神をコンパイルして保持します。最良のキャストは、キャストなしです。もちろん、あなたのユースケースはLongと可能なNULL値を必要とするかもしれません。しかし、intや他のlongがあなたの唯一の入力であり、そしてあなたのメソッドが修正されることができるならば、私はこのアプローチを提案するでしょう。

long myLong = myInt;

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

Long myLong = (long) myInt;
2
Steven Spungin
 1,new Long(intValue);
 2,Long.valueOf(intValue);
2
Vicky

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
Thamme Gowda
 //Suppose you have int and you wan to convert it to Long
 int i=78;
 //convert to Long
 Long l=Long.valueOf(i)
1
Virendra Singh

私はこれでたくさんの問題を抱えていました。私はただしたかった:

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
MaskedCoder

メソッドLong.valueOf(long)のみが存在するとすぐに、Long.valueOf(intValue)を使用する場合、intからlongへのキャストは暗黙的に行われます。

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

Integer.valueOf(intValue).longValue()
0