public class Contenation { public static void main(String[] args) { String str = "Happy"; String str2 = "I" + str + "now" + 21; System.out.println(str2); } } 使用javap -c Contenation反编译得到的JVM字节码: Compiled from "Contenation.java" public class Contenation extends java.lang.Object{ public Contenation(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: ldc #2; //String Happy 2: astore_1 3: new #3; //class java/lang/StringBuilder 6: dup 7: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V 10: ldc #5; //String I 12: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 15: aload_1 16: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 19: ldc #7; //String now 21: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 24: bipush 21 26: invokevirtual #8; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder; 29: invokevirtual #9; //Method java/lang/StringBuilder.toString:()Ljava/lang/String; 32: astore_2 33: getstatic #10; //Field java/lang/System.out:Ljava/io/PrintStream; 36: aload_2 37: invokevirtual #11; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 40: return } 可以发现,当我们使用+运算符时,他会生成很多临时的String对象,这些对象会在程序结束之后由垃圾回收机制回收;然后调用StringBuilder的append()方法将其拼接在一起,最后调用toString()方法输出。
相关推荐
类模板+运算符重载(成员函数形式),大家一起学习交流
根据给定的文件信息,本文将详细介绍如何在C++中通过重载加号运算符(+)实现字符串的连接功能。 ### C++中的运算符重载 运算符重载是C++面向对象编程的一个重要特性,它允许程序员改变内置运算符(如+、-、*等)...
请定义一个Point类,将前置++和后置++运算符重载为成员函数,实现成员变量m_x和m_y的加一操作 同时重载流插入运算符,实现对Point类对象的格式化输出。例如 Point p; cout; 输出结果为: (0,0) 请根据给定的main...
在C++编程语言中,重载运算符是一种强大的特性,允许我们为已有的运算符赋予新的含义或行为,以适应自定义数据类型。本项目"分数运算器"就是利用这一特性来实现分数的加减乘除等运算,并通过界面提供用户友好的交互...
为了解决这个问题,我们需要重载运算符函数,使其能够正确地处理复数运算。 在 C++ 中,我们可以将运算符重载为类的成员函数或友元函数。成员函数的形式如下:class Complex { public: Complex operator+(Complex b...
本教程将深入探讨如何在C#中创建复数类以及如何重载运算符。 首先,让我们了解复数的基本概念。复数由两部分组成:实部(Real)和虚部(Imaginary),通常表示为`a + bi`,其中`a`是实部,`b`是虚部,`i`是虚数单位...
掌握运算符重载的方法。定义Point类,有坐标_x,y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。
在C++编程中,重载运算符是一种强大的特性,它允许我们为已有的运算符赋予新的含义,以适应特定的数据类型。在这个特定的项目中,我们重载了两个运算符:加法运算符"+"和大于运算符">",用于判断三个边长是否能构成...
几个典型运算符重载(C++) 本节主要讲述了C++中几个典型运算符的重载,包括前置和后置形式的++和--运算符的重载。 一、前置和后置形式的++和--运算符的重载 在C++中,可以对++和--运算符进行重载,以便在用户...
"类运算符重载设计定义一个二维方阵类 matrix" 本节将详细讲解类运算符重载设计定义一个二维方阵类 matrix,通过重载二元运算符“+”、“-”、“*”和一元运算符“~”,来实现矩阵加、矩阵减、矩阵乘以及矩阵转置。...
成员函数重载运算符通常用于单个对象操作,而友元函数适用于需要两个对象参与的运算。通过这种方式,C++可以提供高度的灵活性和表达性,使得代码更易于阅读和理解。 在`test_operator_overload_member_function`这...
**运算符重载**允许我们改变内置运算符的行为,使其适用于用户自定义类型的对象。在本题中,我们重载了减法运算符 `-`,使两个 `MyTime` 对象能够相减,并返回它们之间的时间差(以秒为单位)。为了实现这一功能,...
在C++编程语言中,运算符重载是一项重要的特性,它允许我们为已有的运算符赋予新的含义,以便在自定义类型上使用。本篇内容将深入探讨C++中的运算符重载,...因此,在设计类时应谨慎考虑是否需要以及如何重载运算符。
成员形式重载是指在类的成员函数中重载运算符,而非成员形式重载是指在类的友元函数中重载运算符。例如,在`ch18_5.cpp`中,我们定义了非成员形式的前增量和后增量运算符: ```cpp friend Increase & operator ++...
### C++中不可重载的运算符及其规则 在C++编程语言中,为了提高代码的灵活性和可读性,提供了运算符重载这一特性。然而,并非所有的运算符都可以被重载。本文将详细介绍那些不可重载的运算符以及自增(`++`)和自减(`...
重载运算符可以使得类的行为更符合用户的直观理解,例如对于自定义的复数类型,我们可以重载加法运算符("+")来实现复数相加。 在C#中,我们可以使用`operator`关键字来重载运算符。以下是一个简单的示例,展示...
对point类重载++和--运算符.................................................................................
### 两个二维数组相加与相减:使用成员函数重载运算符“+”和“-” 在C++中,运算符重载是一种强大的特性,它允许程序员改变内置运算符的行为,使其适用于自定义类型(如类或结构)。本文将详细介绍如何通过成员...
重载运算符的方法是定义一个函数,该函数的名称是特殊的,通常以"operator"开头,后面跟着要重载的运算符。例如,我们可以为自定义的复数类重载"+"运算符进行复数相加: ```cpp class Complex { public: Complex ...
重载运算符可以使得输出操作变得更加灵活和方便。在C++中,流类是Input/Output Stream的缩写,负责处理输入/输出操作。重载运算符可以使得程序员可以按照自己的需求来设计输出格式和内容。 在C++中,重载运算符的...