一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java Long==Long有趣的現象詳解

java Long==Long有趣的現象詳解

2021-05-30 14:46smxknife Java教程

這篇文章主要給大家介紹了關于java Long==Long有趣的現象的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

long數據類型是64位有符號的java原始數據類型。當對整數的計算結果可能超出int數據類型的范圍時使用。

long數據類型范圍是-9,223,372,036,854,775,808至9,223,372,036,854,775,807(-2^63至2^63-1)。

long數據類型范圍內的所有整數稱為long類型的整數字面量。long類型的整數常數總是以大寫l或小寫l結尾。

1. 描述

首先,這里應該聲明一下,long等對象類型判斷是否相等,采用long == long這種形式是錯誤的。

可以采用以下方式:

?
1
2
3
4
5
6
7
8
long left = 100l;
long right = 100l;
 
// 方法1:
system.out.println(left.doublevalue() == right.doublevalue());
 
// 方法2:
system.out.println(left.compareto(right));

輸出結果:

true
0

1.1 實驗1

如果你親自操刀,動手做了以下實驗,也許你會突然得到一個讓你困惑的結果:

?
1
2
3
4
long left = 100l;
long right = 100l;
 
system.out.println(left == right);

輸出結果:

true

沒錯,采用 == 竟然也能得出true,也許這時候你可能會誤以為jvm在自動拆箱(我以前也是這樣以為,有點小白!!!)。

1.2 實驗2

那么請你再做下面這個實驗:

?
1
2
3
4
5
6
7
8
9
10
11
long left = 1000l;
long right = 1000l;
 
// 方法1:
system.out.println(left.doublevalue() == right.doublevalue());
 
// 方法2:
system.out.println(left.compareto(right));
 
// 錯誤的方法:
system.out.println(left == right);

輸出結果

true
0
false

等會,什么情況,怎么又為false?

1.3 實驗3

不急,再做一個實驗。

?
1
2
3
4
5
6
7
for (int i = -200; i < 200; i++) {
      long left = long.valueof(i);
      long right = long.valueof(i);
 
      system.out.println("long left = " + i + ", long right = " + i
          + ", left == right :" + (left == right));
    }

輸出結果

long left = -200, long right = -200, left == right :false
long left = -199, long right = -199, left == right :false
long left = -198, long right = -198, left == right :false
long left = -197, long right = -197, left == right :false
long left = -196, long right = -196, left == right :false
long left = -195, long right = -195, left == right :false
long left = -194, long right = -194, left == right :false
long left = -193, long right = -193, left == right :false
long left = -192, long right = -192, left == right :false
long left = -191, long right = -191, left == right :false
long left = -190, long right = -190, left == right :false
long left = -189, long right = -189, left == right :false
long left = -188, long right = -188, left == right :false
long left = -187, long right = -187, left == right :false
long left = -186, long right = -186, left == right :false
long left = -185, long right = -185, left == right :false
long left = -184, long right = -184, left == right :false
long left = -183, long right = -183, left == right :false
long left = -182, long right = -182, left == right :false
long left = -181, long right = -181, left == right :false
long left = -180, long right = -180, left == right :false
long left = -179, long right = -179, left == right :false
long left = -178, long right = -178, left == right :false
long left = -177, long right = -177, left == right :false
long left = -176, long right = -176, left == right :false
long left = -175, long right = -175, left == right :false
long left = -174, long right = -174, left == right :false
long left = -173, long right = -173, left == right :false
long left = -172, long right = -172, left == right :false
long left = -171, long right = -171, left == right :false
long left = -170, long right = -170, left == right :false
long left = -169, long right = -169, left == right :false
long left = -168, long right = -168, left == right :false
long left = -167, long right = -167, left == right :false
long left = -166, long right = -166, left == right :false
long left = -165, long right = -165, left == right :false
long left = -164, long right = -164, left == right :false
long left = -163, long right = -163, left == right :false
long left = -162, long right = -162, left == right :false
long left = -161, long right = -161, left == right :false
long left = -160, long right = -160, left == right :false
long left = -159, long right = -159, left == right :false
long left = -158, long right = -158, left == right :false
long left = -157, long right = -157, left == right :false
long left = -156, long right = -156, left == right :false
long left = -155, long right = -155, left == right :false
long left = -154, long right = -154, left == right :false
long left = -153, long right = -153, left == right :false
long left = -152, long right = -152, left == right :false
long left = -151, long right = -151, left == right :false
long left = -150, long right = -150, left == right :false
long left = -149, long right = -149, left == right :false
long left = -148, long right = -148, left == right :false
long left = -147, long right = -147, left == right :false
long left = -146, long right = -146, left == right :false
long left = -145, long right = -145, left == right :false
long left = -144, long right = -144, left == right :false
long left = -143, long right = -143, left == right :false
long left = -142, long right = -142, left == right :false
long left = -141, long right = -141, left == right :false
long left = -140, long right = -140, left == right :false
long left = -139, long right = -139, left == right :false
long left = -138, long right = -138, left == right :false
long left = -137, long right = -137, left == right :false
long left = -136, long right = -136, left == right :false
long left = -135, long right = -135, left == right :false
long left = -134, long right = -134, left == right :false
long left = -133, long right = -133, left == right :false
long left = -132, long right = -132, left == right :false
long left = -131, long right = -131, left == right :false
long left = -130, long right = -130, left == right :false
long left = -129, long right = -129, left == right :false
long left = -128, long right = -128, left == right :true
long left = -127, long right = -127, left == right :true
long left = -126, long right = -126, left == right :true
long left = -125, long right = -125, left == right :true
long left = -124, long right = -124, left == right :true
long left = -123, long right = -123, left == right :true
long left = -122, long right = -122, left == right :true
long left = -121, long right = -121, left == right :true
long left = -120, long right = -120, left == right :true
long left = -119, long right = -119, left == right :true
long left = -118, long right = -118, left == right :true
long left = -117, long right = -117, left == right :true
long left = -116, long right = -116, left == right :true
long left = -115, long right = -115, left == right :true
long left = -114, long right = -114, left == right :true
long left = -113, long right = -113, left == right :true
long left = -112, long right = -112, left == right :true
long left = -111, long right = -111, left == right :true
long left = -110, long right = -110, left == right :true
long left = -109, long right = -109, left == right :true
long left = -108, long right = -108, left == right :true
long left = -107, long right = -107, left == right :true
long left = -106, long right = -106, left == right :true
long left = -105, long right = -105, left == right :true
long left = -104, long right = -104, left == right :true
long left = -103, long right = -103, left == right :true
long left = -102, long right = -102, left == right :true
long left = -101, long right = -101, left == right :true
long left = -100, long right = -100, left == right :true
long left = -99, long right = -99, left == right :true
long left = -98, long right = -98, left == right :true
long left = -97, long right = -97, left == right :true
long left = -96, long right = -96, left == right :true
long left = -95, long right = -95, left == right :true
long left = -94, long right = -94, left == right :true
long left = -93, long right = -93, left == right :true
long left = -92, long right = -92, left == right :true
long left = -91, long right = -91, left == right :true
long left = -90, long right = -90, left == right :true
long left = -89, long right = -89, left == right :true
long left = -88, long right = -88, left == right :true
long left = -87, long right = -87, left == right :true
long left = -86, long right = -86, left == right :true
long left = -85, long right = -85, left == right :true
long left = -84, long right = -84, left == right :true
long left = -83, long right = -83, left == right :true
long left = -82, long right = -82, left == right :true
long left = -81, long right = -81, left == right :true
long left = -80, long right = -80, left == right :true
long left = -79, long right = -79, left == right :true
long left = -78, long right = -78, left == right :true
long left = -77, long right = -77, left == right :true
long left = -76, long right = -76, left == right :true
long left = -75, long right = -75, left == right :true
long left = -74, long right = -74, left == right :true
long left = -73, long right = -73, left == right :true
long left = -72, long right = -72, left == right :true
long left = -71, long right = -71, left == right :true
long left = -70, long right = -70, left == right :true
long left = -69, long right = -69, left == right :true
long left = -68, long right = -68, left == right :true
long left = -67, long right = -67, left == right :true
long left = -66, long right = -66, left == right :true
long left = -65, long right = -65, left == right :true
long left = -64, long right = -64, left == right :true
long left = -63, long right = -63, left == right :true
long left = -62, long right = -62, left == right :true
long left = -61, long right = -61, left == right :true
long left = -60, long right = -60, left == right :true
long left = -59, long right = -59, left == right :true
long left = -58, long right = -58, left == right :true
long left = -57, long right = -57, left == right :true
long left = -56, long right = -56, left == right :true
long left = -55, long right = -55, left == right :true
long left = -54, long right = -54, left == right :true
long left = -53, long right = -53, left == right :true
long left = -52, long right = -52, left == right :true
long left = -51, long right = -51, left == right :true
long left = -50, long right = -50, left == right :true
long left = -49, long right = -49, left == right :true
long left = -48, long right = -48, left == right :true
long left = -47, long right = -47, left == right :true
long left = -46, long right = -46, left == right :true
long left = -45, long right = -45, left == right :true
long left = -44, long right = -44, left == right :true
long left = -43, long right = -43, left == right :true
long left = -42, long right = -42, left == right :true
long left = -41, long right = -41, left == right :true
long left = -40, long right = -40, left == right :true
long left = -39, long right = -39, left == right :true
long left = -38, long right = -38, left == right :true
long left = -37, long right = -37, left == right :true
long left = -36, long right = -36, left == right :true
long left = -35, long right = -35, left == right :true
long left = -34, long right = -34, left == right :true
long left = -33, long right = -33, left == right :true
long left = -32, long right = -32, left == right :true
long left = -31, long right = -31, left == right :true
long left = -30, long right = -30, left == right :true
long left = -29, long right = -29, left == right :true
long left = -28, long right = -28, left == right :true
long left = -27, long right = -27, left == right :true
long left = -26, long right = -26, left == right :true
long left = -25, long right = -25, left == right :true
long left = -24, long right = -24, left == right :true
long left = -23, long right = -23, left == right :true
long left = -22, long right = -22, left == right :true
long left = -21, long right = -21, left == right :true
long left = -20, long right = -20, left == right :true
long left = -19, long right = -19, left == right :true
long left = -18, long right = -18, left == right :true
long left = -17, long right = -17, left == right :true
long left = -16, long right = -16, left == right :true
long left = -15, long right = -15, left == right :true
long left = -14, long right = -14, left == right :true
long left = -13, long right = -13, left == right :true
long left = -12, long right = -12, left == right :true
long left = -11, long right = -11, left == right :true
long left = -10, long right = -10, left == right :true
long left = -9, long right = -9, left == right :true
long left = -8, long right = -8, left == right :true
long left = -7, long right = -7, left == right :true
long left = -6, long right = -6, left == right :true
long left = -5, long right = -5, left == right :true
long left = -4, long right = -4, left == right :true
long left = -3, long right = -3, left == right :true
long left = -2, long right = -2, left == right :true
long left = -1, long right = -1, left == right :true
long left = 0, long right = 0, left == right :true
long left = 1, long right = 1, left == right :true
long left = 2, long right = 2, left == right :true
long left = 3, long right = 3, left == right :true
long left = 4, long right = 4, left == right :true
long left = 5, long right = 5, left == right :true
long left = 6, long right = 6, left == right :true
long left = 7, long right = 7, left == right :true
long left = 8, long right = 8, left == right :true
long left = 9, long right = 9, left == right :true
long left = 10, long right = 10, left == right :true
long left = 11, long right = 11, left == right :true
long left = 12, long right = 12, left == right :true
long left = 13, long right = 13, left == right :true
long left = 14, long right = 14, left == right :true
long left = 15, long right = 15, left == right :true
long left = 16, long right = 16, left == right :true
long left = 17, long right = 17, left == right :true
long left = 18, long right = 18, left == right :true
long left = 19, long right = 19, left == right :true
long left = 20, long right = 20, left == right :true
long left = 21, long right = 21, left == right :true
long left = 22, long right = 22, left == right :true
long left = 23, long right = 23, left == right :true
long left = 24, long right = 24, left == right :true
long left = 25, long right = 25, left == right :true
long left = 26, long right = 26, left == right :true
long left = 27, long right = 27, left == right :true
long left = 28, long right = 28, left == right :true
long left = 29, long right = 29, left == right :true
long left = 30, long right = 30, left == right :true
long left = 31, long right = 31, left == right :true
long left = 32, long right = 32, left == right :true
long left = 33, long right = 33, left == right :true
long left = 34, long right = 34, left == right :true
long left = 35, long right = 35, left == right :true
long left = 36, long right = 36, left == right :true
long left = 37, long right = 37, left == right :true
long left = 38, long right = 38, left == right :true
long left = 39, long right = 39, left == right :true
long left = 40, long right = 40, left == right :true
long left = 41, long right = 41, left == right :true
long left = 42, long right = 42, left == right :true
long left = 43, long right = 43, left == right :true
long left = 44, long right = 44, left == right :true
long left = 45, long right = 45, left == right :true
long left = 46, long right = 46, left == right :true
long left = 47, long right = 47, left == right :true
long left = 48, long right = 48, left == right :true
long left = 49, long right = 49, left == right :true
long left = 50, long right = 50, left == right :true
long left = 51, long right = 51, left == right :true
long left = 52, long right = 52, left == right :true
long left = 53, long right = 53, left == right :true
long left = 54, long right = 54, left == right :true
long left = 55, long right = 55, left == right :true
long left = 56, long right = 56, left == right :true
long left = 57, long right = 57, left == right :true
long left = 58, long right = 58, left == right :true
long left = 59, long right = 59, left == right :true
long left = 60, long right = 60, left == right :true
long left = 61, long right = 61, left == right :true
long left = 62, long right = 62, left == right :true
long left = 63, long right = 63, left == right :true
long left = 64, long right = 64, left == right :true
long left = 65, long right = 65, left == right :true
long left = 66, long right = 66, left == right :true
long left = 67, long right = 67, left == right :true
long left = 68, long right = 68, left == right :true
long left = 69, long right = 69, left == right :true
long left = 70, long right = 70, left == right :true
long left = 71, long right = 71, left == right :true
long left = 72, long right = 72, left == right :true
long left = 73, long right = 73, left == right :true
long left = 74, long right = 74, left == right :true
long left = 75, long right = 75, left == right :true
long left = 76, long right = 76, left == right :true
long left = 77, long right = 77, left == right :true
long left = 78, long right = 78, left == right :true
long left = 79, long right = 79, left == right :true
long left = 80, long right = 80, left == right :true
long left = 81, long right = 81, left == right :true
long left = 82, long right = 82, left == right :true
long left = 83, long right = 83, left == right :true
long left = 84, long right = 84, left == right :true
long left = 85, long right = 85, left == right :true
long left = 86, long right = 86, left == right :true
long left = 87, long right = 87, left == right :true
long left = 88, long right = 88, left == right :true
long left = 89, long right = 89, left == right :true
long left = 90, long right = 90, left == right :true
long left = 91, long right = 91, left == right :true
long left = 92, long right = 92, left == right :true
long left = 93, long right = 93, left == right :true
long left = 94, long right = 94, left == right :true
long left = 95, long right = 95, left == right :true
long left = 96, long right = 96, left == right :true
long left = 97, long right = 97, left == right :true
long left = 98, long right = 98, left == right :true
long left = 99, long right = 99, left == right :true
long left = 100, long right = 100, left == right :true
long left = 101, long right = 101, left == right :true
long left = 102, long right = 102, left == right :true
long left = 103, long right = 103, left == right :true
long left = 104, long right = 104, left == right :true
long left = 105, long right = 105, left == right :true
long left = 106, long right = 106, left == right :true
long left = 107, long right = 107, left == right :true
long left = 108, long right = 108, left == right :true
long left = 109, long right = 109, left == right :true
long left = 110, long right = 110, left == right :true
long left = 111, long right = 111, left == right :true
long left = 112, long right = 112, left == right :true
long left = 113, long right = 113, left == right :true
long left = 114, long right = 114, left == right :true
long left = 115, long right = 115, left == right :true
long left = 116, long right = 116, left == right :true
long left = 117, long right = 117, left == right :true
long left = 118, long right = 118, left == right :true
long left = 119, long right = 119, left == right :true
long left = 120, long right = 120, left == right :true
long left = 121, long right = 121, left == right :true
long left = 122, long right = 122, left == right :true
long left = 123, long right = 123, left == right :true
long left = 124, long right = 124, left == right :true
long left = 125, long right = 125, left == right :true
long left = 126, long right = 126, left == right :true
long left = 127, long right = 127, left == right :true
long left = 128, long right = 128, left == right :false
long left = 129, long right = 129, left == right :false
long left = 130, long right = 130, left == right :false
long left = 131, long right = 131, left == right :false
long left = 132, long right = 132, left == right :false
long left = 133, long right = 133, left == right :false
long left = 134, long right = 134, left == right :false
long left = 135, long right = 135, left == right :false
long left = 136, long right = 136, left == right :false
long left = 137, long right = 137, left == right :false
long left = 138, long right = 138, left == right :false
long left = 139, long right = 139, left == right :false
long left = 140, long right = 140, left == right :false
long left = 141, long right = 141, left == right :false
long left = 142, long right = 142, left == right :false
long left = 143, long right = 143, left == right :false
long left = 144, long right = 144, left == right :false
long left = 145, long right = 145, left == right :false
long left = 146, long right = 146, left == right :false
long left = 147, long right = 147, left == right :false
long left = 148, long right = 148, left == right :false
long left = 149, long right = 149, left == right :false
long left = 150, long right = 150, left == right :false
long left = 151, long right = 151, left == right :false
long left = 152, long right = 152, left == right :false
long left = 153, long right = 153, left == right :false
long left = 154, long right = 154, left == right :false
long left = 155, long right = 155, left == right :false
long left = 156, long right = 156, left == right :false
long left = 157, long right = 157, left == right :false
long left = 158, long right = 158, left == right :false
long left = 159, long right = 159, left == right :false
long left = 160, long right = 160, left == right :false
long left = 161, long right = 161, left == right :false
long left = 162, long right = 162, left == right :false
long left = 163, long right = 163, left == right :false
long left = 164, long right = 164, left == right :false
long left = 165, long right = 165, left == right :false
long left = 166, long right = 166, left == right :false
long left = 167, long right = 167, left == right :false
long left = 168, long right = 168, left == right :false
long left = 169, long right = 169, left == right :false
long left = 170, long right = 170, left == right :false
long left = 171, long right = 171, left == right :false
long left = 172, long right = 172, left == right :false
long left = 173, long right = 173, left == right :false
long left = 174, long right = 174, left == right :false
long left = 175, long right = 175, left == right :false
long left = 176, long right = 176, left == right :false
long left = 177, long right = 177, left == right :false
long left = 178, long right = 178, left == right :false
long left = 179, long right = 179, left == right :false
long left = 180, long right = 180, left == right :false
long left = 181, long right = 181, left == right :false
long left = 182, long right = 182, left == right :false
long left = 183, long right = 183, left == right :false
long left = 184, long right = 184, left == right :false
long left = 185, long right = 185, left == right :false
long left = 186, long right = 186, left == right :false
long left = 187, long right = 187, left == right :false
long left = 188, long right = 188, left == right :false
long left = 189, long right = 189, left == right :false
long left = 190, long right = 190, left == right :false
long left = 191, long right = 191, left == right :false
long left = 192, long right = 192, left == right :false
long left = 193, long right = 193, left == right :false
long left = 194, long right = 194, left == right :false
long left = 195, long right = 195, left == right :false
long left = 196, long right = 196, left == right :false
long left = 197, long right = 197, left == right :false
long left = 198, long right = 198, left == right :false
long left = 199, long right = 199, left == right :false

通過這個超長的輸出結果,你會發現,存在一個區間[-128, 127],在這個區間里通過 == 這種方式返回的是true ,其他返回的都是false。

2. 總結

其實,通過源碼分析:

?
1
2
3
4
5
6
7
public static long valueof(long l) {
    final int offset = 128;
    if (l >= -128 && l <= 127) { // will cache
      return longcache.cache[(int)l + offset];
    }
    return new long(l);
  }

在128~127這些數的對象在內存中被緩存起來,在內存中提供重用,這些數獲取的時候就會自動獲取緩存中的數,而不是new出來的對象。

所以,這與自動打包拆包無關。

再所以…,判讀long對象是否相等的時候建議不要采用 == 的形式,程序中無法絕對的判斷參數值是否會在這個區間內,如果不在,那就出現讓你摸不著頭腦的問題。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.smxknife.com/2018/03/22/Long-Long有趣的現象/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99re最新网址 | 欧美va在线高清 | 精品操| 日本肉体xxxx69xxxx | 桥本有菜ssni-677在线观看 | 欧美人体高清在线观看ggogo | 免费我看视频在线观看 | 国产精品每日在线观看男人的天堂 | 青青草99热久久 | 国产自一区 | 亚洲天堂99 | 99爱免费 | 五月色婷婷在线影院 | 亚洲高清在线视频 | 97精品国产自在现线免费观看 | 日本aaaa级| 91婷婷射 | 日本高清在线播放 | 幸福草电视剧演员表介绍 | 摸进老太婆的裤裆小说 | 無码一区中文字幕少妇熟女H | 洗濯屋し在线观看 | 69午夜影院 | free嫩白的12sex性自由 | 国产午夜永久福利视频在线观看 | 2020年精品国产午夜福利在线 | 91搞搞 | 国产一区二区三区福利 | 暖暖视频免费观看视频中国.韩剧 | 深夜视频免费看 | 青草久久网| 91香蕉国产在线观看免费永久 | 国产三区二区 | 国内精品久久久久小说网 | 欧美国产视频 | 晚上禁用的十大黄台视频 | 亚洲乱码一二三四区国产 | 精品久久久久久 | 温柔校草高h | 日本高清va不卡视频在线观看 | 四虎成人www国产精品 |