成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JAVA語(yǔ)法糖“+”運(yùn)算符

開(kāi)發(fā) 后端
JAVA提供的“+”運(yùn)算符,如Iteger+String,從C++的角度來(lái)看總是想找到JAVA是怎么重載這個(gè)“+”運(yùn)算符,于是進(jìn)去String這個(gè)類(lèi)中看,然而并沒(méi)有什么卵發(fā)現(xiàn),于是乎想著JAVA是怎么做到的?下面來(lái)為你逐步分析下JAVA是怎么實(shí)現(xiàn)“+操作符重載的”。

JAVA提供的“+”運(yùn)算符,如Iteger+String,從C++的角度來(lái)看總是想找到JAVA是怎么重載這個(gè)“+”運(yùn)算符,于是進(jìn)去String這個(gè)類(lèi)中看,然而并沒(méi)有什么卵發(fā)現(xiàn),于是乎想著JAVA是怎么做到的?下面來(lái)為你逐步分析下JAVA是怎么實(shí)現(xiàn)“+操作符重載的”。

示例

  1. public class Example {  
  2. public static void main(String[] args) {  
  3. Integer a = null 
  4. String b = a + "456" 
  5. System.out.println(b);  
  6.  

這個(gè)程序很簡(jiǎn)單就是一個(gè)Integer和String的“+”運(yùn)算表達(dá)式。運(yùn)行結(jié)果:null456

反編譯示例程序

命令:

  1. javap -c Example 

反編譯后的結(jié)果如下:

  1. Compiled from "Example.java" 
  2. public class com.boyu.budmw.test.Example extends java.lang.Object{ 
  3. public com.boyu.budmw.test.Example(); 
  4.   Code: 
  5.    0:    aload_0 
  6.    1:    invokespecial    #1; //Method java/lang/Object."<init>":()V 
  7.    4:    return 
  8.  
  9. public static void main(java.lang.String[]); 
  10.   Code: 
  11.    0:    aconst_null 
  12.    1:    astore_1 
  13.    2:    new    #2; //class java/lang/StringBuilder 
  14.    5:    dup 
  15.    6:    invokespecial    #3; //Method java/lang/StringBuilder."<init>":()V 
  16.    9:    aload_1 
  17.    10:    invokevirtual    #4; //Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; 
  18.    13:    ldc    #5; //String 456 
  19.    15:    invokevirtual    #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 
  20.    18:    invokevirtual    #7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String; 
  21.    21:    astore_2 
  22.    22:    getstatic    #8; //Field java/lang/System.out:Ljava/io/PrintStream; 
  23.    25:    aload_2 
  24.    26:    invokevirtual    #9; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 
  25.    29:    return 
  26.  

我們來(lái)分析下main函數(shù)部分:

  • 0:將常量null壓入操作數(shù)棧
  • 1:從操作數(shù)棧中將null彈出保存到索引為1的局部變量a中
  • 2:new一個(gè)StringBuilder
  • 5:復(fù)制之前new出來(lái)的空間并將其壓入操作數(shù)棧
  • 6:調(diào)用進(jìn)行初始化
  • 9:將結(jié)果保存到操作數(shù)棧
  • 10:調(diào)用StringBuilder.append(java/lang/Object)
  • 13:將“456”壓入棧頂
  • 15:StringBuilder.append(java/lang/String)
  • 18:執(zhí)行toString函數(shù)

從上面的分析我們可以看到其最終是先生成了一個(gè)StringBuilder對(duì)象,之后的“+”操作符都是調(diào)用了StringBuilder.append()進(jìn)行“+”的。這就可以解釋上面示例程序運(yùn)行后為什么是null456了,append object的時(shí)候調(diào)用了

  1. public static String valueOf(Object obj) {  
  2. return (obj == null) ? "null" : obj.toString();  

將object轉(zhuǎn)化為String了。

為什么JAVA不支持操作符重載

像C++中類(lèi)對(duì)操作符進(jìn)行了重載,個(gè)人覺(jué)得會(huì)操作維護(hù)難得問(wèn)題,因?yàn)椴僮鞣剌d沒(méi)有一個(gè)標(biāo)準(zhǔn)來(lái)約束大家都可以想當(dāng)然的進(jìn)行重載會(huì)造成語(yǔ)義相差大,可讀性嚴(yán)重降低,所以java中去掉操作符重載這個(gè)特性和他的高級(jí)面向?qū)ο蠛芟喾o,不糾結(jié)這個(gè)問(wèn)題。

后記

這都是在開(kāi)發(fā)過(guò)程中會(huì)經(jīng)常使用的一些東西但是可能在平時(shí)開(kāi)發(fā)過(guò)程中沒(méi)有挖的這么深入,都想當(dāng)然了,后面可以嘗試不斷挖掘這些不被發(fā)現(xiàn)的小case。

責(zé)任編輯:武曉燕 來(lái)源: segmentfault
相關(guān)推薦

2025-02-24 11:16:20

2009-08-11 15:51:08

C#運(yùn)算符算術(shù)運(yùn)算符

2009-08-12 15:20:18

C#賦值運(yùn)算符復(fù)合賦值運(yùn)算符

2010-07-20 14:52:51

Perl語(yǔ)法

2009-08-12 15:02:49

C#賦值運(yùn)算符簡(jiǎn)單賦值運(yùn)算符

2009-07-09 17:40:26

Java運(yùn)算符

2023-04-10 08:58:13

C#關(guān)系運(yùn)算符

2024-02-26 15:17:20

2009-06-21 13:48:05

ShellLinux運(yùn)算符

2021-12-15 10:25:57

C++運(yùn)算符重載

2009-11-18 09:19:47

PHP邏輯運(yùn)算符

2009-08-12 09:30:10

C#??運(yùn)算符

2023-04-11 10:13:04

Java運(yùn)算符反碼

2009-11-26 11:12:07

PHP運(yùn)算符

2017-05-11 16:38:07

javascript邏輯運(yùn)算符

2009-12-08 10:00:36

PHP比較運(yùn)算符

2009-08-12 14:49:33

C#移位運(yùn)算符

2009-08-12 10:47:03

C#運(yùn)算符重載

2013-08-15 16:48:39

.Net基礎(chǔ)

2021-02-20 23:34:22

JavaScript運(yùn)算符開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91高清视频在线 | 国产精品精品视频一区二区三区 | 成人欧美一区二区三区白人 | 97av视频在线 | 国产乱码久久久久久 | 在线a视频网站 | 国产98在线 | 免费, | 国产精品久久欧美久久一区 | 久久久精品综合 | 国产精品一区二区三 | 精品成人在线 | 日韩第一夜| 亚洲成人精品国产 | 欧美一区视频 | 又爽又黄axxx片免费观看 | 九七午夜剧场福利写真 | 亚洲欧美中文日韩在线v日本 | 99影视 | 日韩福利电影 | 中文字幕乱码一区二区三区 | 日日碰碰 | 久久综合伊人 | 羞羞网站在线免费观看 | 午夜国产一级片 | 日韩在线视频免费观看 | 亚洲午夜小视频 | 国产日韩欧美 | 欧美精品在线一区 | 色综合久久天天综合网 | 久久久久久a| 国产精品一二三区在线观看 | 夜夜骑综合 | 久久综合久 | 国产精品久久久久久婷婷天堂 | 国产精品亚洲二区 | 在线欧美a | 国产在线视频一区 | 欧美中国少妇xxx性高请视频 | 一区二区免费看 | 中文字幕乱码一区二区三区 | 国产一区二区三区在线看 |