Java'da cast ile int arasındaki ve intValue () yöntemi arasındaki fark

Bir tam sayıya dönüştürülmesi gereken uzun bir değere sahibim. Döküm kullandığımda, zaman zaman tamsayı değeri beklenmeyen bir eksi değer veriyor. Ancak Uzun 'da intValue() yöntemini kullandığımda beklenen sonuçlar geliyor.

Döküm ve intValue () yöntemini kullanmanın farkını bilmek istiyorum

  1. Casting Example

    int days = (int) ((toDate.getTime() - fromDate.getTime())/(1000 * 60 * 60 * 24));

  2. intValue Example

    int days = ((Long) ((toDate.getTime() - fromDate.getTime())/(1000 * 60 * 60 * 24))).intValue();

Düzenleme: Yorumlarda önerildiği gibi eksi değerleri taşma olmadan göstermek için Daha Ayrıntılı Örnek. Sonuç dökümden önce 27 olur. Döküm yaparken, değer -22 olur. Ancak intValue yöntemi kullanılırsa sonuç 27 olur.

kod

System.out.println("nextDeliveryDate = " + nextDeliveryDate);
            System.out.println("nextDeliveryDate.getTime() = " + nextDeliveryDate.getTime());
            System.out.println("expectedDeliveryDate = " + expectedDeliveryDate);
            System.out.println("expectedDeliveryDate.getTime() = " + expectedDeliveryDate.getTime());
            System.out.println("nextDeliveryDate.getTime() - expectedDeliveryDate.getTime() = " + (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime()));
            System.out.println("(nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24) = " + (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24));
            System.out.println("((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24)) = " + ((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24)));
            System.out.println("((Long) ((nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24))).intValue() = " + ((Long) ((nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24))).intValue());

Sonuçlar

Info: nextDeliveryDate = Thu May 14 00:00:00 IST 2015
Info: nextDeliveryDate.getTime() = 1431541800000
Info: expectedDeliveryDate = Fri Apr 17 00:00:00 IST 2015
Info: expectedDeliveryDate.getTime() = 1429209000000
Info: nextDeliveryDate.getTime() - expectedDeliveryDate.getTime() = 2332800000
Info: (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24) = 27
Info: ((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24)) = -22
Info: ((Long) ((nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24))).intValue() = 27
4
Sadece emin olmak için: kodunuzda "fromDate" in "toDate" den "daha küçük" olmasını sağlayan bir kontrol var mı?
katma yazar GhostCat, kaynak
Teşekkür ederim. Buna göre kodlayacağım. Teşekkür ederim.
katma yazar Buddhika Ariyaratne, kaynak
Afedersiniz. Bu en iyi cevap. Kabul edilmiş.
katma yazar Buddhika Ariyaratne, kaynak
Afedersiniz. Bu en iyi cevap. Kabul edilmiş.
katma yazar Buddhika Ariyaratne, kaynak
Tarih hesaplamasından dolayı değil, dökümden geliyor. Kontrol etmek için System.out.println kullandım.
katma yazar Buddhika Ariyaratne, kaynak
Tarih hesaplamasından dolayı değil, dökümden geliyor. Kontrol etmek için System.out.println kullandım.
katma yazar Buddhika Ariyaratne, kaynak
Java sürümü 1.7.0_71
katma yazar Buddhika Ariyaratne, kaynak
Java sürümü 1.7.0_71
katma yazar Buddhika Ariyaratne, kaynak
Teşekkür ederim. Buna göre kodlayacağım. Teşekkür ederim.
katma yazar Buddhika Ariyaratne, kaynak
@BuddhikaAriyaratne hala taşmalardan koruyan herhangi bir söz bulamıyor, bu yüzden her iki şekilde de kontrolsüz bırakmak iyi bir fikir olduğunu sanmıyorum. Ben cevabımı buldum birkaç çözüm daha için
katma yazar matrixanomaly, kaynak
@BuddhikaAriyaratne hala taşmalardan koruyan herhangi bir söz bulamıyor, bu yüzden her iki şekilde de kontrolsüz bırakmak iyi bir fikir olduğunu sanmıyorum. Ben cevabımı buldum birkaç çözüm daha için
katma yazar matrixanomaly, kaynak
@BuddhikaAriyaratne yalnızca güncellenmiş testlerinizi gördü ... ilginç, taşmaları önlemek için javadocs'ta herhangi bir intValue uygulaması göremiyorum, taşma olabileceği veya olamayacağı tanımlanamayan bir sorun olabilir mi? Bu arada Java'nın hangi sürümü
katma yazar matrixanomaly, kaynak
@BuddhikaAriyaratne yalnızca güncellenmiş testlerinizi gördü ... ilginç, taşmaları önlemek için javadocs'ta herhangi bir intValue uygulaması göremiyorum, taşma olabileceği veya olamayacağı tanımlanamayan bir sorun olabilir mi? Bu arada Java'nın hangi sürümü
katma yazar matrixanomaly, kaynak
Tek fark, ilki (int), diğeri (int) (Uzun). Sonucu değiştirmemeli
katma yazar Oskar Kjellin, kaynak
Tek fark, ilki (int), diğeri (int) (Uzun). Sonucu değiştirmemeli
katma yazar Oskar Kjellin, kaynak
İlk örnek, herhangi bir nesne oluşturma işlemi olmadığı için daha hızlı olmalıdır (çok uzun zamandan bir int'ye geçiş tek bir CPU döngüsü olmalıdır). İkinci örnekte, "autoboxing" nedeniyle, temel olarak yeni bir nesne yaratıyorsunuz. Bu "yeni Uzun ((((toDate.getTime() - fromDate.getTime ())/(1000 * 60 * 60 * 24)))) intValue ()" ile aynıdır.
katma yazar BretC, kaynak
İlk örnek, herhangi bir nesne oluşturma işlemi olmadığı için daha hızlı olmalıdır (çok uzun zamandan bir int'ye geçiş tek bir CPU döngüsü olmalıdır). İkinci örnekte, "autoboxing" nedeniyle, temel olarak yeni bir nesne yaratıyorsunuz. Bu "yeni Uzun ((((toDate.getTime() - fromDate.getTime ())/(1000 * 60 * 60 * 24)))) intValue ()" ile aynıdır.
katma yazar BretC, kaynak
int Yayınlama, orijinal Gönderinizde ve eklediğiniz yeni Düzenlemede farklıdır: Orijinal: int days = (int) ((toDate.getTime() - fromDate.getTime ())/( 1000 * 60 * 60 * 24)); Düzenleme: System.out.println ("((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime ())/(1000 * 60 * 60 * 24)) = "+ ((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime ())/(1000 * 60 * 60 * 24)));
katma yazar Mecon, kaynak
int Yayınlama, orijinal Gönderinizde ve eklediğiniz yeni Düzenlemede farklıdır: Orijinal: int days = (int) ((toDate.getTime() - fromDate.getTime ())/( 1000 * 60 * 60 * 24)); Düzenleme: System.out.println ("((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime ())/(1000 * 60 * 60 * 24)) = "+ ((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime ())/(1000 * 60 * 60 * 24)));
katma yazar Mecon, kaynak
cevabım kabul edilmedi ... ama gerçekten doğru cevaptı. İki yaklaşımda fark yoktur.
katma yazar Mecon, kaynak
cevabım kabul edilmedi ... ama gerçekten doğru cevaptı. İki yaklaşımda fark yoktur.
katma yazar Mecon, kaynak
TimeUnit kullanmalısınız
katma yazar user180100, kaynak
TimeUnit kullanmalısınız
katma yazar user180100, kaynak

8 cevap

İnt taşması isabet ediyor olabilirsiniz. toDate.getTime() ve fromDate.getTime() arasındaki fark 2.147 milyardan (( Integer.MAX_VALUE ) büyükse, o kazandı bir tamsayı olarak ifade etmek mümkün olamaz ve yalnızca sarılır ve minimum değere değişir - örneğin Integer.MAX_VALUE + 100 size negatif sonuç verecektir.

Tüm işlemleri, taşma olmadan int 'a dönüştürülecek kadar küçük olduğundan emin olana kadar uzun süre çalıştırmanız gerekir. İki örneğinizin de doğru olduğunu düşünüyorum, ilki diğerinden kesinlikle daha net.

Ayrıca, 1000 * 60 * 60 * 24 gibi ifadelerin tamsayı olduğunu ve taşabileceklerini de unutmayın. Örneğin, bir aydaki milisaniye sayısı 31 * 24 * 3600 * 1000 , ancak böyle yazılırsa -1616567296 değerini döndürür.

EDIT: Let me explain the output you have attached in your edit :

Info: nextDeliveryDate.getTime() - expectedDeliveryDate.getTime() = 2332800000
Info: (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24) = 27
Info: ((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24)) = -22
Info: ((Long) ((nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24))).intValue() = 27

Ayrıca nextDeliveryDate.getTime() - expectedDeliveryDate.getTime() 'ye x olarak bakacağım. Bu yüzden long x = 2332800000 olarak bildirebiliriz (int'nin 4 byte'da tutulacak kadar büyük olduğu için derleme hatası verecektir).

İlk satırda x/bir şey var, bir şey bir int ve x uzun, bu nedenle bir şey , uzun sürecek, nihai sonuç uzun.

İkinci satırda ((int) x)/something 'a sahipsiniz, bu yüzden 2332800000 -1962167296 veren tamsayıya dönüştürülür ve sonra -1962167296/nothing ' a sahip olursunuz.

Son satırınızda, (Long) (x/something) 'a sahipsiniz, ki bu birinciyle aynı durumda.

5
katma
Ayrıntıları göstermek için kodu düzenledim. Örnek, beklenen int değerinin 27 olduğu bir vaka verir. Son sonuçta taşma yoktur.
katma yazar Buddhika Ariyaratne, kaynak
Teşekkür ederim. Sayının taşma olmadan int kullanabilecek kadar küçük olduğundan emin olmalıydım. O zaman birkaç ek hat kullanmak zorunda kalabilirim. Fakat eğer intValue kullanırsam, endişelenmeme gerek yok gibi görünüyor.
katma yazar Buddhika Ariyaratne, kaynak
Cevabımı sorunuza düzenlemeler eklemek için düzenledim
katma yazar Jaroslaw Pawlak, kaynak

İnt taşması isabet ediyor olabilirsiniz. toDate.getTime() ve fromDate.getTime() arasındaki fark 2.147 milyardan (( Integer.MAX_VALUE ) büyükse, o kazandı bir tamsayı olarak ifade etmek mümkün olamaz ve yalnızca sarılır ve minimum değere değişir - örneğin Integer.MAX_VALUE + 100 size negatif sonuç verecektir.

Tüm işlemleri, taşma olmadan int 'a dönüştürülecek kadar küçük olduğundan emin olana kadar uzun süre çalıştırmanız gerekir. İki örneğinizin de doğru olduğunu düşünüyorum, ilki diğerinden kesinlikle daha net.

Ayrıca, 1000 * 60 * 60 * 24 gibi ifadelerin tamsayı olduğunu ve taşabileceklerini de unutmayın. Örneğin, bir aydaki milisaniye sayısı 31 * 24 * 3600 * 1000 , ancak böyle yazılırsa -1616567296 değerini döndürür.

EDIT: Let me explain the output you have attached in your edit :

Info: nextDeliveryDate.getTime() - expectedDeliveryDate.getTime() = 2332800000
Info: (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24) = 27
Info: ((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24)) = -22
Info: ((Long) ((nextDeliveryDate.getTime() - expectedDeliveryDate.getTime())/(1000 * 60 * 60 * 24))).intValue() = 27

Ayrıca nextDeliveryDate.getTime() - expectedDeliveryDate.getTime() 'ye x olarak bakacağım. Bu yüzden long x = 2332800000 olarak bildirebiliriz (int'nin 4 byte'da tutulacak kadar büyük olduğu için derleme hatası verecektir).

İlk satırda x/bir şey var, bir şey bir int ve x uzun, bu nedenle bir şey , uzun sürecek, nihai sonuç uzun.

İkinci satırda ((int) x)/something 'a sahipsiniz, bu yüzden 2332800000 -1962167296 veren tamsayıya dönüştürülür ve sonra -1962167296/nothing ' a sahip olursunuz.

Son satırınızda, (Long) (x/something) 'a sahipsiniz, ki bu birinciyle aynı durumda.

5
katma
Ayrıntıları göstermek için kodu düzenledim. Örnek, beklenen int değerinin 27 olduğu bir vaka verir. Son sonuçta taşma yoktur.
katma yazar Buddhika Ariyaratne, kaynak
Teşekkür ederim. Sayının taşma olmadan int kullanabilecek kadar küçük olduğundan emin olmalıydım. O zaman birkaç ek hat kullanmak zorunda kalabilirim. Fakat eğer intValue kullanırsam, endişelenmeme gerek yok gibi görünüyor.
katma yazar Buddhika Ariyaratne, kaynak
Cevabımı sorunuza düzenlemeler eklemek için düzenledim
katma yazar Jaroslaw Pawlak, kaynak

Sonuçlarınızın farklı olması gerektiğini sanmıyorum, çünkü Long.intValue() yönteminin yaptığı:

public int intValue() {
    return (int)value;
}

Bu iki satır arasındaki kontrol akışınızda bir şey doğru değil.

Bu testi aşağıda deneyebilirsiniz:

Calendar now = Calendar.getInstance();
Date fromDate = now.getTime();
now.add(Calendar.YEAR, 10);
Date toDate = now.getTime();

System.out.println("line 0: " + (toDate.getTime() - fromDate.getTime()));
System.out.println("line 1: " + (int)(toDate.getTime() - fromDate.getTime()));
System.out.println("line 2: " + new Long((toDate.getTime() - fromDate.getTime())).intValue());

int days = (int) ((toDate.getTime() - fromDate.getTime())/(1000 * 60 * 60 * 24));

System.out.println("line 3: " + days);

days = ((Long) ((toDate.getTime() - fromDate.getTime())/(1000 * 60 * 60 * 24))).intValue();

System.out.println("line 4: " + days);
3
katma
Amacını çözemiyorum. Afedersiniz
katma yazar Buddhika Ariyaratne, kaynak
Haklısın. Döküm ve intValue yöntemlerinde fark yoktur. Soruyu güncelleyeceğim.
katma yazar Buddhika Ariyaratne, kaynak
Sonuçlar farklı. Ben de farkı göstermek ve bir düzenleme olarak eklemek için çıktı kullandım.
katma yazar Buddhika Ariyaratne, kaynak
Düzenlemenizi ikinci son satırla şu şekilde tekrar deneyin: System.out.println ("((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime ())/(1000 * 60 * 60 * 24)) = "+ ((int) ((nextDeliveryDate.getTime() - expectedDeliveryDate.getTime ())/(1000 * 60 * 60 * 24))));
katma yazar Mecon, kaynak
Son Düzenlemenizde farklı değerlere sahip olmanızın nedeni, (int) işleminizin SADECE çıkarma bölümüne uygulanmasıdır. - WITH - bölmeli çıkarma işlemine uygulanmalıdır.
katma yazar Mecon, kaynak
Demek istediğim şu ki iki işlem şöyledir: (int) ve Long.intValue() her zaman aynı sonucu verir
katma yazar Mecon, kaynak
Düzenlemeni az önce kontrol ettim. Son iki satır orijinal yayınınızdan farklı. İkinci son satırda, "subraction" a basıp sonra onu böldüğünüzde int . "Çıkarma" sonucu gerçekten çok büyük bir sayıdır, bu nedenle taşmalara neden olur. Ancak son satırda, alt tabaka ve bölme kombinasyonuna long.intValue uygulamalısınız. Değeri çok küçüktür (27) ve bu nedenle aşırı akışa neden olmaz.
katma yazar Mecon, kaynak

Sonuçlarınızın farklı olması gerektiğini sanmıyorum, çünkü Long.intValue() yönteminin yaptığı:

public int intValue() {
    return (int)value;
}

Bu iki satır arasındaki kontrol akışınızda bir şey doğru değil.

Bu testi aşağıda deneyebilirsiniz:

Calendar now = Calendar.getInstance();
Date fromDate = now.getTime();
now.add(Calendar.YEAR, 10);
Date toDate = now.getTime();

System.out.println("line 0: " + (toDate.getTime() - fromDate.getTime()));
System.out.println("line 1: " + (int)(toDate.getTime() - fromDate.getTime()));
System.out.println("line 2: " + new Long((toDate.getTime() - fromDate.getTime())).intValue());

int days = (int) ((toDate.getTime() - fromDate.getTime())/(1000 * 60 * 60 * 24));

System.out.println("line 3: " + days);

days = ((Long) ((toDate.getTime() - fromDate.getTime())/(1000 * 60 * 60 * 24))).intValue();

System.out.println("line 4: " + days);
3
katma
Haklısın. Döküm ve intValue yöntemlerinde fark yoktur. Soruyu güncelleyeceğim.
katma yazar Buddhika Ariyaratne, kaynak
Sonuçlar farklı. Ben de farkı göstermek ve bir düzenleme olarak eklemek için çıktı kullandım.
katma yazar Buddhika Ariyaratne, kaynak
Amacını çözemiyorum. Afedersiniz
katma yazar Buddhika Ariyaratne, kaynak
Son Düzenlemenizde farklı değerlere sahip olmanızın nedeni, (int) işleminizin SADECE çıkarma bölümüne uygulanmasıdır. - WITH - bölmeli çıkarma işlemine uygulanmalıdır.
katma yazar Mecon, kaynak
Düzenlemenizi ikinci son satırla şu şekilde tekrar deneyin: System.out.println ("((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime ())/(1000 * 60 * 60 * 24)) = "+ ((int) ((nextDeliveryDate.getTime() - expectedDeliveryDate.getTime ())/(1000 * 60 * 60 * 24))));
katma yazar Mecon, kaynak
Demek istediğim şu ki iki işlem şöyledir: (int) ve Long.intValue() her zaman aynı sonucu verir
katma yazar Mecon, kaynak
Düzenlemeni az önce kontrol ettim. Son iki satır orijinal yayınınızdan farklı. İkinci son satırda, "subraction" a basıp sonra onu böldüğünüzde int . "Çıkarma" sonucu gerçekten çok büyük bir sayıdır, bu nedenle taşmalara neden olur. Ancak son satırda, alt tabaka ve bölme kombinasyonuna long.intValue uygulamalısınız. Değeri çok küçüktür (27) ve bu nedenle aşırı akışa neden olmaz.
katma yazar Mecon, kaynak

Firstly, to explain a little about the difference between casting to int and IntValue() method in Java.

IntValue() is a method in the Integer class (and other wrapper classes).

IntValue'un yapacağı şey tamsayıyı almak ve bir int türü olarak döndürmektir.

Note that int is an primitive datatype and Integer is a class that holds this datatype. It's like a wrapper, because there are data structures that cannot hold primitive datatypes. See this SO question for more info

Temelde:

Bir int tamsayısına dönüştürme boks denir.

     

Bir Tamsayı'nın int'ye dönüştürülmesi kutuya

denir.

SO sorusunda belirtildiği gibi ben bağladım.

However, as for your example, this is a little different because of the types involved. The difference is that you perform all operations as a Long datatype, which holds a lot more numbers than an int first, for accuracy, then only convert it to an int. So your IntValue() method is from the long datatype, which Java7 docs mention of it's use. Basically it just changes it from a long to an int, which still can cause overflows.

Long öğesinin long ilkel veri türü için sarıcı sınıfı olduğunu unutmayın (içinde ilkel veri türü IntValue() yöntemine sahip değildir)

So the difference in values you get may be because when you did the simple cast from Long -> int primitive datatypes, there wasn't an overflow.

Kodunuzu, gerçekten değişmeyen büyük sayılarla test etmenizi öneririm (tarihin aksine, her aldığınızda farklı olan saat)

Taşma sorununu çözme

Ayrıca bu SO sorusu .

Önerebileceğim bir diğer yol, ilk önce kullanım için bir int için kullanmadan önce kesinliği azaltmak (dolayısıyla hassasiyeti yitirmek), yeterince güvenli bir değere (ve yeterince kesin) ulaşmaktır.

Or, use BigIntegers, which are immutable arbitrary-precision integers. see the the documentation on this class and this SO Q&A on how to use it. It is definitely going to add complexity to the code as they are immutable.

This other SO question has good solutions that give nice methods on detecting overflow in ints and longs which I also recommend as well.

2
katma
Tüm açıklamalar için çok teşekkür ederim. Gelecekte koddaki hataları önlemek için benim için çok değerlidir. Ancak Mecon ve diğerlerinin belirttiği gibi, düzenlediğim kodda döküm ve intValue yöntemlerini kullanma biçimimde bir fark var. Temelde intValue yöntemlerinin döküm ve kullanımında hiçbir fark yoktur.
katma yazar Buddhika Ariyaratne, kaynak

Firstly, to explain a little about the difference between casting to int and IntValue() method in Java.

IntValue() is a method in the Integer class (and other wrapper classes).

IntValue'un yapacağı şey tamsayıyı almak ve bir int türü olarak döndürmektir.

Note that int is an primitive datatype and Integer is a class that holds this datatype. It's like a wrapper, because there are data structures that cannot hold primitive datatypes. See this SO question for more info

Temelde:

Bir int tamsayısına dönüştürme boks denir.

     

Bir Tamsayı'nın int'ye dönüştürülmesi kutuya

denir.

SO sorusunda belirtildiği gibi ben bağladım.

However, as for your example, this is a little different because of the types involved. The difference is that you perform all operations as a Long datatype, which holds a lot more numbers than an int first, for accuracy, then only convert it to an int. So your IntValue() method is from the long datatype, which Java7 docs mention of it's use. Basically it just changes it from a long to an int, which still can cause overflows.

Long öğesinin long ilkel veri türü için sarıcı sınıfı olduğunu unutmayın (içinde ilkel veri türü IntValue() yöntemine sahip değildir)

So the difference in values you get may be because when you did the simple cast from Long -> int primitive datatypes, there wasn't an overflow.

Kodunuzu, gerçekten değişmeyen büyük sayılarla test etmenizi öneririm (tarihin aksine, her aldığınızda farklı olan saat)

Taşma sorununu çözme

Ayrıca bu SO sorusu .

Önerebileceğim bir diğer yol, ilk önce kullanım için bir int için kullanmadan önce kesinliği azaltmak (dolayısıyla hassasiyeti yitirmek), yeterince güvenli bir değere (ve yeterince kesin) ulaşmaktır.

Or, use BigIntegers, which are immutable arbitrary-precision integers. see the the documentation on this class and this SO Q&A on how to use it. It is definitely going to add complexity to the code as they are immutable.

This other SO question has good solutions that give nice methods on detecting overflow in ints and longs which I also recommend as well.

2
katma
Tüm açıklamalar için çok teşekkür ederim. Gelecekte koddaki hataları önlemek için benim için çok değerlidir. Ancak Mecon ve diğerlerinin belirttiği gibi, düzenlediğim kodda döküm ve intValue yöntemlerini kullanma biçimimde bir fark var. Temelde intValue yöntemlerinin döküm ve kullanımında hiçbir fark yoktur.
katma yazar Buddhika Ariyaratne, kaynak

Fark yok, bu kod

public static void main(String[] args) {
    System.out.println((int) (21470000000l));
    System.out.println((int) ((Long)21470000000l).intValue());
}

Bu çıktıya sahip:

-4836480
-4836480

Bu nedenle, toDate ve fromDate 'inizde farklı değerler var.

Değer tamsayı MAX değerini aşarsa, "beklenen" sonucu asla alamazsınız, çünkü oraya sığamayacaktır.

2
katma
Bir fark var. Lütfen düzenlenen koda bakınız.
katma yazar Buddhika Ariyaratne, kaynak

Fark yok, bu kod

public static void main(String[] args) {
    System.out.println((int) (21470000000l));
    System.out.println((int) ((Long)21470000000l).intValue());
}

Bu çıktıya sahip:

-4836480
-4836480

Bu nedenle, toDate ve fromDate 'inizde farklı değerler var.

Değer tamsayı MAX değerini aşarsa, "beklenen" sonucu asla alamazsınız, çünkü oraya sığamayacaktır.

2
katma
Bir fark var. Lütfen düzenlenen koda bakınız.
katma yazar Buddhika Ariyaratne, kaynak