国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java修改Integer變量值遇到的問(wèn)題及解決

Java修改Integer變量值遇到的問(wèn)題及解決

2022-01-10 00:56丶老邱 Java教程

這篇文章主要介紹了Java修改Integer變量值遇到的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java 修改Integer變量值

對(duì)于Integer變量來(lái)說(shuō),比較變量值常見(jiàn)情形如下:

?
1
2
3
4
5
6
Integer a = 1000
    Integer b = 1000
    Integer c = 100
    Integer d = 100
    System.out.println(a == b); 
    System.out.println(c == d);

“==”比較的是地址的值,所以正確答案是false,true;

當(dāng)我們對(duì)一個(gè)Interger變量直接用“=”號(hào)賦值時(shí),相當(dāng)于自動(dòng)裝箱,即把右邊的int型變量(整數(shù)時(shí)默認(rèn)是int) 轉(zhuǎn)換成Integer變量,另外我們看看源碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
         * Returns an {@code Integer} instance representing the specified
         * {@code int} value.  If a new {@code Integer} instance is not
         * required, this method should generally be used in preference to
         * the constructor {@link #Integer(int)}, as this method is likely
         * to yield significantly better space and time performance by
         * caching frequently requested values.
         *
         * This method will always cache values in the range -128 to 127,
         * inclusive, and may cache other values outside of this range.
         *
         * @param  i an {@code int} value.
         * @return an {@code Integer} instance representing {@code i}.
         * @since  1.5
         */
        public static Integer valueOf(int i) { 
            assert IntegerCache.high >= 127
            if (i >= IntegerCache.low && i <= IntegerCache.high) 
                //當(dāng)為-128和127之間時(shí),并沒(méi)有new一個(gè)Integer,而是從緩存中取 
                return IntegerCache.cache[i + (-IntegerCache.low)]; 
            return new Integer(i); 
        }

所以說(shuō)如果int的值為-128到127時(shí),是從常量池里取的Integer變量,所以“c==d”是對(duì)的,因?yàn)閏、d是100

而“a==b”為false,因?yàn)樗麄兊闹禐?000,所以是在堆里new出兩個(gè)不同的變量。

這些都很好理解,但是怎么改變Integer的整型值呢?

我嘗試了兩種方法去改變Integer的整型值

(1)

有這么一個(gè)方法

?
1
2
3
public void ceshi(Integer integer){
    integer=4444;
}

main方法

?
1
2
3
Integer shuzi=new Integer(100);
new Test55().ceshi(shuzi);
System.out.println(shuzi);

輸出的結(jié)果卻還是100而不是444

再來(lái)看看

(2)

main方法

?
1
2
3
Integer shuzi=new Integer(100);
shuzi=5000;
System.out.println(shuzi);

這回輸出的結(jié)果卻又是5000,為什么(1)和(2)都用了“=”號(hào)賦值,一個(gè)成功,一個(gè)卻失敗了?

看看源碼

Integer的源碼:

?
1
2
3
4
5
6
/**
 * The value of the {@code Integer}.
 *
 * @serial
 */
private final int value;

Integer變量里的value明明就是final變量,照理說(shuō)是不能夠修改的,那為什么(2)卻成功了?

因?yàn)椋涸冢?)的這個(gè)情況里,我對(duì)它賦值5000,相當(dāng)于new了一個(gè)新的Integer變量,它的value值是5000,然后把這個(gè)新的變量賦給“shuzi”這個(gè)變量,原來(lái)那個(gè)value值為100的Integer變量就被覆蓋了,除非我用一個(gè)副本保存,不然他就會(huì)被GC清除了。

還有一個(gè)問(wèn)題:那為什么(1)改變不了?

因?yàn)椋何覀兿纫溃琂ava 只有值傳遞,只不過(guò)值傳遞分為:內(nèi)存中數(shù)值的值傳遞以及內(nèi)存地址數(shù)值的值傳遞,傳遞一個(gè)Integer變量參數(shù)進(jìn)去,實(shí)際上是構(gòu)建了一個(gè)副本,通過(guò)這個(gè)副本我們只能去修改原來(lái)Integer變量的非final成員變量(假如有的話(huà),也可以是其他類(lèi)型),上面也說(shuō)了,如果去修改Integer類(lèi)型的final變量,那么是會(huì)新new一個(gè)Integer變量,去覆蓋這個(gè)變量副本,所以原來(lái)的Integer變量還是原來(lái)的,僅僅是“ceshi”這個(gè)方法里的副本變量變了,這么理解就清楚了。

Integer值比較需要注意的問(wèn)題

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.com.test;
 
/**
 * Created by ***** 2018/6/29 9:18
 * java中Integer類(lèi)型對(duì)于-128-127之間的數(shù)是緩沖區(qū)取的,
 *  所以用等號(hào)比較是一致的。但對(duì)于不在這區(qū)間的數(shù)字是在堆中new出來(lái)的。所以地址空間不一樣,也就不相等。
 */
public class IntegerTest {
    public static void main(String[] args) {
        Integer a1 = Integer.valueOf(60);  //danielinbiti
        Integer b1 = 60;
        System.out.println("1:="+(a1 == b1));  //true
 
 
        Integer a2 = 60;
        Integer b2 = 60;
        System.out.println("2:="+(a2 == b2));   //true
 
 
        Integer a3 = new Integer(60);
        Integer b3 = 60;   // 裝箱過(guò)程也就是Integer b3=Integer.valueOf(60)
        System.out.println("3:="+(a3 == b3));    //false
//        System.out.println("3:="+(a3.equals(b3)));   //true
 
        Integer a4 = 129;//大于127時(shí),在堆中新建
        Integer b4 = 129;
        System.out.println("4:="+(a4 == b4));  //false
//        System.out.println("4:="+(a4.equals(b4)));    //true
    }
}

代碼如上所示,運(yùn)行結(jié)果在注釋后。

原因

java中Integer類(lèi)型對(duì)于-128-127之間的數(shù)是緩沖區(qū)取的,所以用等號(hào)比較是一致的。但對(duì)于不在這區(qū)間的數(shù)字是在堆中new出來(lái)的。所以地址空間不一樣,也就不相等。

Integer b3=60,這是一個(gè)裝箱過(guò)程也就是Integer b3=Integer.valueOf(60)

解決辦法

使用 equals 代替 “==“,即是前者可能在性能上稍遜于后者,但是用后者的話(huà)存在bug的可能性。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/qiuwenjie123/article/details/80153206

延伸 · 閱讀

精彩推薦
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線(xiàn)程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒(méi)有升過(guò)級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開(kāi)發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
主站蜘蛛池模板: 日韩精品三区 | 高清av电影 | 成人av影视| 超级碰在线视频 | 成人在线免费看 | 999国产在线观看 | 一区二区成人网 | 中文字幕 在线观看 | 成人黄色短视频在线观看 | 日韩精品一区二区三区四区 | 亚洲蜜桃妇女 | 成人福利电影 | 精品视频一区二区三区在线观看 | 国产毛片欧美毛片久久久 | 免费久久99精品国产婷婷六月 | 午夜爽爽爽 | 国内精品一区二区 | www.avtt天堂网 | 亚洲精品免费视频 | av在线成人 | www.中文字幕 | 国产美女视频自拍 | 色com| 久久福利电影 | 久久国际影院 | 欧美精品一区二区三区蜜桃视频 | 日本99精品 | 国产精品一区二区久久 | 一久久久 | 国产电影一区二区三区图片 | 中文字幕日韩欧美一区二区三区 | 欧美大片一区二区 | 成人在线精品视频 | 久久久99精品免费观看 | 二区中文字幕 | 日韩精品在线观看免费 | 99精品国自产在线 | 黄色美女网站在线观看 | 国产一级在线观看 | 91免费在线 | 亚洲精品一区二区三区蜜桃久 |