亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java學習教程之常量折疊詳解

2024-07-14 08:42:23
字體:
來源:轉載
供稿:網友

前言

為什么會寫著篇博客,因為昨天看了關于final關鍵字的解析。但是有個問題始終沒有得到解決,于是請教了我qq上之前添加的知乎大神。他給我回復的第一條消息:常量折疊。身為渣渣猿的我立馬查詢了這個概念。這是第一次知道這個概念。知乎大神還給我講了好多。讓我終于明白了這個常量折疊的概念

所謂常量折疊是Java在編譯期間做的一個優化,簡單的來說就是在編譯期就把一些表達式計算好,不需要在運行時進行計算。

下面話不多說了,來一起看看詳細的介紹吧

實例解析

昨天,讓我迷惑的代碼是下面這段代碼

 public static void main(String[] args) { String a = "hello2"; final String b = "hello"; String d = "hello"; String c = b + 2; String e = d + 2; System.out.println((a == c)); System.out.println((a == e)); }

這段的執行結果是

true
false

我就是不明白為什么第一個返回true呢?

留著這個疑問,我們先了解下常量折疊的概念。來更好的理解上面的代碼

常量折疊

常量折疊的概念

  • 常量折疊是一種編譯器優化技術。
  • 常量折疊主要指的是編譯期常量加減乘除的運算過程會被折疊

對于 String s1 = "1" + "2";

編譯器會給你優化成 String s1 = "12";

在生成的字節碼中,根本看不到 "1" "2" 這兩個東西。

我們通過idea進行驗證下

1、源碼文件

 public static void main(String[] args) { String s1 = "1"+"2"; }

2、運行后,idea有個out文件夾,找到上面文件的class文件

 public static void main(String[] args) { String s1 = "12"; }

確實如上面所說,編譯器會給你進行優化

常量折疊發生的條件

必須是編譯期常量之間進行運算才會進行常量折疊。

編譯期常量就是“編譯的時候就可以確定其值的常量”,

  • 首先:字面量是編譯期常量。(數字字面量,字符串字面量等)
  • 其次:編譯期常量進行簡單運算的結果也是編譯期常量,如1+2,"a"+"b"。
  • 最后:被編譯器常量賦值的 final 的基本類型和字符串變量也是編譯期常量。

舉個栗子

1.第一個栗子

 public static void main(String[] args) { String s1="a"+"bc"; String s2="ab"+"c"; System.out.println(s1 == s2); }

相信大家都知道了,輸出為true

并且只創建了一個 "abc" 字符串對象,且位于字符串常量池中。

2、第二個栗子

 public static void main(String[] args) {  String a = "a";  String bc = "bc";  String s1 = "a" + "bc";  String s2 = a + bc;  System.out.println(s1 == s2); }

這個結果呢?false

s1 是字符串字面量相加,但是 s2 卻是兩個非 final 的變量相加,所以不會進行常量折疊。

而是根據 String 類特有的 + 運算符重載,變成類似這樣的代碼

String s2 = new StringBuffer(a).append(b).toString(); 

這里toString()會生成新的String變量,顯然用 == 運算符比較是會返回 false。

3、第三個栗子

 public static void main(String[] args) {  final String a = "a";  final String bc = "bc";  String s1 = "a" + "bc";  String s2 = a + bc;  System.out.println(s1 == s2); }

這里的結果就是true

因為 被編譯器常量賦值的 final 的基本類型和字符串變量也是編譯期常量

4、第四個栗子

 public static void main(String[] args) {  String x ="a";  final String a = x;  final String bc = "bc";  String s1 = "a" + "bc";  String s2 = a + bc;  System.out.println(s1 == s2); }

這里的結果是false

這里需要注意的是:final的變量,不是被編譯期常量初始化的也不是編譯器常量

這里的a 就不是編譯器常量

總結

現在看完,是不是對上面打印的結果為什么是true 知道了呢?
所以。只要牢記常量折疊主要指的是編譯期常量加減乘除的運算過程會被折疊

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


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲aⅴaaaaaa毛片| 欧美精品videosex牲欧美| 日韩在线激情视频| 国产精品视频久久久久| 国产美女直播视频一区| 欧亚精品在线观看| 久久久久久久久久av| 国产精品成人播放| 亚洲男女性事视频| 亚洲欧洲午夜一线一品| 国产不卡av在线免费观看| 久久久噜噜噜久噜久久| 日韩最新免费不卡| 在线亚洲国产精品网| 亚洲成人av中文字幕| 福利视频导航一区| 国产精品丝袜高跟| 91精品国产高清自在线| 久久久久国产精品免费| 国产精品久久久久久婷婷天堂| 亚洲色图校园春色| 国产精品成人v| 亚洲欧洲美洲在线综合| 色哟哟网站入口亚洲精品| 国产成人在线视频| 亚洲精品美女视频| 欧美激情精品久久久久久蜜臀| 亚洲午夜精品久久久久久久久久久久| 日韩一二三在线视频播| 欧美精品免费在线观看| 成人免费高清完整版在线观看| 精品国内亚洲在观看18黄| 毛片精品免费在线观看| 日韩精品视频免费专区在线播放| 午夜精品久久久久久久久久久久| 欧美成人午夜激情视频| 亚洲综合国产精品| 色偷偷综合社区| 精品二区三区线观看| 亚洲女人天堂视频| 日韩免费在线看| 亚洲女人被黑人巨大进入| 中文字幕亚洲无线码在线一区| 精品国产自在精品国产浪潮| 国产精品专区第二| 亚洲欧美日韩国产精品| 日韩动漫免费观看电视剧高清| 日韩精品视频在线免费观看| 欧美在线视频在线播放完整版免费观看| 中文国产亚洲喷潮| 久久久久久久电影一区| 国产精品一区二区av影院萌芽| 国产欧美精品一区二区三区-老狼| 亚洲欧美国产视频| 国产一区二区久久精品| 久久夜色精品国产| 亚洲国产精品热久久| 国产欧美日韩最新| 91精品国产综合久久香蕉922| 亚洲精品丝袜日韩| 91禁外国网站| 成人在线国产精品| 精品国偷自产在线视频| 久热精品视频在线| 亚洲第一网站免费视频| 在线播放精品一区二区三区| 久久国产精品网站| 亚洲亚裔videos黑人hd| 欧美日韩国产成人在线观看| 久久中文字幕一区| 成人免费看黄网站| 欧美午夜女人视频在线| 国产99久久久欧美黑人| 中文字幕日韩在线视频| 中文字幕日韩欧美在线| 亚洲91精品在线观看| 日韩av电影国产| 国产精品无码专区在线观看| 亚洲成人免费在线视频| www.午夜精品| 久久99国产精品久久久久久久久| 日本高清不卡的在线| 欧美日韩国产色| 日韩在线观看免费高清| 欧美日韩一区二区免费在线观看| 国产精品久久久久久久久影视| 韩剧1988在线观看免费完整版| 久久久久亚洲精品| 国产精品丝袜一区二区三区| 国产99视频在线观看| 久久久久www| 欧美视频在线免费看| 国内精品伊人久久| 亚洲第一二三四五区| 亚洲精品国产电影| 久久久影视精品| 欧美日韩激情美女| 成人有码视频在线播放| 久久精品国产亚洲一区二区| www亚洲精品| 国产精品扒开腿做爽爽爽视频| 欧美午夜激情小视频| 性欧美xxxx视频在线观看| 视频在线观看一区二区| 色视频www在线播放国产成人| 在线播放国产一区中文字幕剧情欧美| 亚洲91av视频| 久久久精品久久久| 久久免费福利视频| 91av视频在线播放| 91精品国产综合久久香蕉的用户体验| 欧美寡妇偷汉性猛交| 琪琪亚洲精品午夜在线| 91成人免费观看网站| 国产精品久久久久久网站| 欧美激情综合色综合啪啪五月| 国产成人精品免费久久久久| 欧美小视频在线| 超碰日本道色综合久久综合| 91久久中文字幕| 91高清免费在线观看| 精品久久久久久久久久久| 欧美精品videos| 久久精品99无色码中文字幕| 日韩av大片在线| 在线激情影院一区| 亚洲图片欧美日产| 欧美精品www在线观看| 久久久久久久91| 国产成人av网| 日本精品在线视频| 亚洲一区美女视频在线观看免费| 日本久久中文字幕| 亚洲精品小视频| 日韩在线观看免费高清完整版| 日韩在线视频线视频免费网站| 一区二区欧美亚洲| 亚洲爱爱爱爱爱| 国产欧美日韩91| 欧洲成人午夜免费大片| 91高清视频免费观看| 91高清视频免费| 久久久久国产精品免费| 国产精品久久久久久久9999| 久久精品国亚洲| 国产精品免费一区| 久久资源免费视频| 91亚洲精品久久久久久久久久久久| 日韩av手机在线观看| 亚洲高清不卡av| 夜夜嗨av一区二区三区免费区| 日韩精品视频在线免费观看| 91成人精品网站| 91免费综合在线| www.日本久久久久com.| 久久免费视频在线观看| 国内成人精品视频| 91人人爽人人爽人人精88v| 亚洲欧美日韩国产成人| 亚洲国产欧美自拍| 91麻豆桃色免费看| 日韩欧美国产激情| 久久精品视频va| 日韩av在线影视|