亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JAVA String 相加編譯器發(fā)生了什么?

Sunxb / 511人閱讀

摘要:編譯器發(fā)生了什么通過查看文件可以知道在編譯的過程中間就將加直接處理成了但是如果是這樣查看文件可以看出是而且可以看到表示在棧內(nèi)存生成了一個引用變量指向堆內(nèi)存的。

package com.spring;
public class Day01 {
    
    

    
    public static void main(String[] args) {
       
         String  b="aa"+"bb";
         
    }

}

String b="aa"+"bb"編譯器發(fā)生了什么?
通過查看class文件可以知道:

// Compiled from Day01.java (version 1.5 : 49.0, super bit)
public class com.spring.Day01 {
  
  // Method descriptor #6 ()V
  // Stack: 1, Locals: 1
  public Day01();
    0  aload_0 [this]
    1  invokespecial java.lang.Object() [8]
    4  return
      Line numbers:
        [pc: 0, line: 10]
      Local variable table:
        [pc: 0, pc: 5] local: this index: 0 type: com.spring.Day01
  
  // Method descriptor #15 ([Ljava/lang/String;)V
  // Stack: 1, Locals: 2
  public static void main(java.lang.String[] args);
    0  ldc  [16]
    2  astore_1 [b]
    3  return
      Line numbers:
        [pc: 0, line: 17]
        [pc: 3, line: 19]
      Local variable table:
        [pc: 0, pc: 4] local: args index: 0 type: java.lang.String[]
        [pc: 3, pc: 4] local: b index: 1 type: java.lang.String
}

在編譯的過程中間就將加直接處理成了"aabb";

但是如果是這樣:

package com.spring;


public class Day01 {
    
    

    
    public static void main(String[] args) {
       String b="bb";
         String c ="aa"+b;
         
    }

}

查看class文件:

// Compiled from Day01.java (version 1.5 : 49.0, super bit)
public class com.spring.Day01 {
  
  // Method descriptor #6 ()V
  // Stack: 1, Locals: 1
  public Day01();
    0  aload_0 [this]
    1  invokespecial java.lang.Object() [8]
    4  return
      Line numbers:
        [pc: 0, line: 10]
      Local variable table:
        [pc: 0, pc: 5] local: this index: 0 type: com.spring.Day01
  
  // Method descriptor #15 ([Ljava/lang/String;)V
  // Stack: 3, Locals: 3
  public static void main(java.lang.String[] args);
     0  ldc  [16]
     2  astore_1 [b]
     3  new java.lang.StringBuilder [18]
     6  dup
     7  ldc  [20]
     9  invokespecial java.lang.StringBuilder(java.lang.String) [22]
    12  aload_1 [b]
    13  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [25]
    16  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [29]
    19  astore_2 [c]
    20  return
      Line numbers:
        [pc: 0, line: 16]
        [pc: 3, line: 17]
        [pc: 20, line: 19]
      Local variable table:
        [pc: 0, pc: 21] local: args index: 0 type: java.lang.String[]
        [pc: 3, pc: 21] local: b index: 1 type: java.lang.String
        [pc: 20, pc: 21] local: c index: 2 type: java.lang.String
}

可以看出是new StringBuffer("aa").append("bb").toString();
而且可以看到astore_1 [b]表示在棧內(nèi)存生成了一個引用變量指向堆內(nèi)存的"bb"。而"aa"則沒有引用變量指向。(可以查看JAVA指令集了解這些內(nèi)容)
非常量字會串相加時,由于相加的變量中存放的是字符串的地址引用,
因為在編譯時無法確切地知道其他具體的值,也就沒有辦法對其進行優(yōu)化處理,這時為了
達到連接的效果,其內(nèi)部采用了 StringBuffer 的機制進行處理。

堆內(nèi)存java虛擬機可以直接使用。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/64345.html

相關(guān)文章

  • JAVA基礎(chǔ)整理(三)

    摘要:因此,這三個類是各有利弊,應(yīng)當(dāng)根據(jù)不同的情況來進行選擇使用當(dāng)字符串相加操作或者改動較少的情況下,建議使用這種形式當(dāng)字符串相加操作較多的情況下,建議使用,如果采用了多線程,則使用。 1.包裝類與自動拆箱裝箱 int a1= 1000;int a2=1000;if(a1==a2){System.out.println(yes);}   ==的比較,基本數(shù)據(jù)類型看的是值是否相等,引用數(shù)據(jù)類型...

    ormsf 評論0 收藏0
  • JVM體系結(jié)構(gòu)與工作方式概覽

    摘要:在本文,筆者將與大家概覽的體系結(jié)構(gòu)與工作方式。將第條和第條指令分別是將兩個局部變量入棧,然后相加。最后一條指令是,這條指令執(zhí)行完后當(dāng)前的這個方法對應(yīng)的這些部件會被回收,局部變量區(qū)的所有值將全部釋放,寄存器會被銷魂,在棧中與這個方 Java之所以號稱一次編譯,到處運行,主要原因是JVM屏蔽了各個計算機平臺相關(guān)的軟件(大多指系統(tǒng))或者硬件之間的差異,使得與平臺相關(guān)的耦合統(tǒng)一由JVM提供者來...

    suosuopuo 評論0 收藏0
  • Java基礎(chǔ)語法知識你真的都會嗎?

    摘要:而所有的數(shù)據(jù)運算都是采用補碼進行的。補碼解決負(fù)數(shù)加法運算正負(fù)零問題,彌補了反碼的不足。通過使用訪問修飾符可以使實例變量對子類可見暫時在學(xué)習(xí)基礎(chǔ)語法知識的時候可以暫時忽略實例變量這部分內(nèi)容,這部分內(nèi)容主要被使用在面向?qū)ο蟮牟糠?,但是極其重要。 showImg(https://segmentfault.com/img/remote/1460000019264541?w=600&h=242)...

    DirtyMind 評論0 收藏0
  • 《轉(zhuǎn)載》經(jīng)典的Java基礎(chǔ)面試題集錦

    摘要:經(jīng)典的基礎(chǔ)面試題集錦經(jīng)典的基礎(chǔ)面試題集錦,歡迎收藏和分享。類變量或者說靜態(tài)變量是通過這個關(guān)鍵字來聲明的。非靜態(tài)變量在每一個對象實例上都有單獨的一份值。對象允許程序和數(shù)據(jù)進行封裝,以減少潛在的干涉。 經(jīng)典的Java基礎(chǔ)面試題集錦 經(jīng)典的Java基礎(chǔ)面試題集錦,歡迎收藏和分享。 問題:如果main方法被聲明為private會怎樣? 答案:能正常編譯,但運行的時候會提示main方法不是pub...

    Winer 評論0 收藏0
  • Java編程基礎(chǔ)02——Java語言基礎(chǔ)

    摘要:所以就想把一大串縮短點,將二進制中的三位用一位表示。以可以大寫也可以小寫開頭版本可以表示二進制了八進制的數(shù)據(jù)表現(xiàn)形式由組成。結(jié)果把系數(shù)基數(shù)的權(quán)次冪相加即可。因為語言采用的是碼來編碼的。 1_(常量的概述和使用)* A:什么是常量(constant) 在程序執(zhí)行的過程中其值不可以發(fā)生改變 B:Java中常量的分類 字面值常量 自定義常量(面向?qū)ο蟛糠种v) C:字面值常量的...

    pakolagij 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<