欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java中常量折疊的示例分析-創(chuàng)新互聯(lián)

小編給大家分享一下java中常量折疊的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)建站是一家專注于成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)與策劃設(shè)計,襄城網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:襄城等地區(qū)。襄城做網(wǎng)站價格咨詢:18980820575

實例解析

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

 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));
 }

這段的執(zhí)行結(jié)果是

true
false

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

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

常量折疊

常量折疊的概念

  • 常量折疊是一種編譯器優(yōu)化技術(shù)。

  • 常量折疊主要指的是編譯期常量加減乘除的運算過程會被折疊

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

編譯器會給你優(yōu)化成 String s1 = "12";

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

我們通過idea進(jìn)行驗證下

1、源碼文件

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

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

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

確實如上面所說,編譯器會給你進(jìn)行優(yōu)化

常量折疊發(fā)生的條件

必須是編譯期常量之間進(jìn)行運算才會進(jìn)行常量折疊。

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

  • 首先:字面量是編譯期常量。(數(shù)字字面量,字符串字面量等)

  • 其次:編譯期常量進(jìn)行簡單運算的結(jié)果也是編譯期常量,如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

并且只創(chuàng)建了一個 "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);
 }

這個結(jié)果呢?false

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

而是根據(jù) 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);
 }

這里的結(jié)果就是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);
 }

這里的結(jié)果是false

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

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

以上是“java中常量折疊的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

標(biāo)題名稱:java中常量折疊的示例分析-創(chuàng)新互聯(lián)
文章出自:http://chinadenli.net/article2/jjcoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、企業(yè)建站、域名注冊、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
亚洲欧美黑人一区二区| 情一色一区二区三区四| 日本不卡视频在线观看| 欧美老太太性生活大片| 狠狠做五月深爱婷婷综合| 人体偷拍一区二区三区| 在线观看视频日韩成人| 国产成人免费激情视频| 内射精子视频欧美一区二区| 亚洲中文字幕剧情在线播放| 白丝美女被插入视频在线观看| 国产精品亚洲二区三区| 九九热精品视频在线观看| 国产精品色热综合在线| 亚洲婷婷开心色四房播播| 日韩一级欧美一级久久| 人妻露脸一区二区三区| 福利一区二区视频在线| 精品丝袜一区二区三区性色| 日本精品免费在线观看| 欧美大粗爽一区二区三区| 欧美久久一区二区精品| 欧美国产日产综合精品| 亚洲欧美精品伊人久久| 免费一级欧美大片免费看| 一区二区三区四区亚洲专区| 91人妻人人精品人人爽| 大香蕉网国产在线观看av| 丝袜破了有美女肉体免费观看| 亚洲熟妇av一区二区三区色堂 | 一区二区三区精品人妻| 日本午夜免费啪视频在线| 国产毛片av一区二区三区小说| 我想看亚洲一级黄色录像| 国产高清三级视频在线观看| 人妻中文一区二区三区| 国产爆操白丝美女在线观看| 欧美日韩黑人免费观看| 欧美日韩综合免费视频| 草草草草在线观看视频| 欧美日韩三区在线观看|