Java基础知识-操作符重载

java操作符重载

  String str1 = "hello";
  String str2 = str1 + " world";
  System.out.println(str2);           

对于java的String对象+运算,大学老师的解释一直是操作符重载,也就默认了,突然有兴趣自己摸索一下。

找到对应的class文件,运行javap -c *.class

函数main的主要代码如下:

  public static void main(java.lang.String[]);
    Code:
       0: ldc           #16                 // String hello
       2: astore_1
       3: new           #18                 // class java/lang/StringBuilder
       6: dup
       7: aload_1
       8: invokestatic  #20                 // Method java/lang/String.valueOf:(
Ljava/lang/Object;)Ljava/lang/String;
      11: invokespecial #26                 // Method java/lang/StringBuilder."<
init>":(Ljava/lang/String;)V
      14: ldc           #29                 // String  world
      16: invokevirtual #31                 // Method java/lang/StringBuilder.ap
pend:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      19: invokevirtual #35                 // Method java/lang/StringBuilder.to
String:()Ljava/lang/String;
      22: astore_2
      23: getstatic     #39                 // Field java/lang/System.out:Ljava/
io/PrintStream;
      26: aload_2
      27: invokevirtual #45                 // Method java/io/PrintStream.printl
n:(Ljava/lang/String;)V
      30: return

可以看到编译后的代码实际创建了StringBuilder,而+操作符也被转成了StringBuilder的append,所以一种说法是java实际并不是把操作符重载了(ps:因为其它操作符没有类似的操作),而是操作符的语法糖而已。

参考文献
javap
为什么Java不支持操作符重载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java中的多态性理解(注意与C++区分) Java中除了static方法和final方法(private方...
    小敏纸阅读 1,455评论 0 19
  • 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?答:可以有多个类,但只能有一个publ...
    岳小川阅读 960评论 0 2
  • 九种基本数据类型的大小,以及他们的封装类。(1)九种基本数据类型和封装类 (2)自动装箱和自动拆箱 什么是自动装箱...
    关玮琳linSir阅读 1,913评论 0 47
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,687评论 0 11
  • Java基础面试 Java基础面试... 1 1. Java基础知识... 5 1.1. Java源程序的扩展名是...
    来着何人阅读 1,197评论 0 1