`
lanhuidong
  • 浏览: 227731 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于String连接(+运算符)

    博客分类:
  • Java
阅读更多

1.代码

package lan.jdk.study;

public class StringTest {
    
    private String name;
    private String address;
    
    public static void main(String[] args) {
        String s = "";
        for(int i = 1; i < 1000000; i++){
            s += i;
        }
    }

    @Override
    public String toString() {
        return "StringTest [name=" + name + ", address=" + address + "]";
    }

}

 记得刚学java的时候,如上代码中的s+=i;应该用StringBuilder的append方法来完成,从而避免生成很多String对象,

而在jdk1.6中,s+=i;这种代码会自动被编译器优化,通过反编译代码,可的到如下结果

Compiled from "StringTest.java"
public class lan.jdk.study.StringTest extends java.lang.Object{
public lan.jdk.study.StringTest();
  Code:
   0:   aload_0
   1:   invokespecial   #11; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0:   ldc     #19; //String
   2:   astore_1
   3:   iconst_1
   4:   istore_2
   5:   goto    30
   8:   new     #21; //class java/lang/StringBuilder
   11:  dup
   12:  aload_1
   13:  invokestatic    #23; //Method java/lang/String.valueOf:(Ljava/lang/Objec
t;)Ljava/lang/String;
   16:  invokespecial   #29; //Method java/lang/StringBuilder."<init>":(Ljava/la
ng/String;)V
   19:  iload_2
   20:  invokevirtual   #32; //Method java/lang/StringBuilder.append:(I)Ljava/la
ng/StringBuilder;
   23:  invokevirtual   #36; //Method java/lang/StringBuilder.toString:()Ljava/l
ang/String;
   26:  astore_1
   27:  iinc    2, 1
   30:  iload_2
   31:  ldc     #40; //int 1000000
   33:  if_icmplt       8
   36:  return

public java.lang.String toString();
  Code:
   0:   new     #21; //class java/lang/StringBuilder
   3:   dup
   4:   ldc     #47; //String StringTest [name=
   6:   invokespecial   #29; //Method java/lang/StringBuilder."<init>":(Ljava/la
ng/String;)V
   9:   aload_0
   10:  getfield        #49; //Field name:Ljava/lang/String;
   13:  invokevirtual   #51; //Method java/lang/StringBuilder.append:(Ljava/lang
/String;)Ljava/lang/StringBuilder;
   16:  ldc     #54; //String , address=
   18:  invokevirtual   #51; //Method java/lang/StringBuilder.append:(Ljava/lang
/String;)Ljava/lang/StringBuilder;
   21:  aload_0
   22:  getfield        #56; //Field address:Ljava/lang/String;
   25:  invokevirtual   #51; //Method java/lang/StringBuilder.append:(Ljava/lang
/String;)Ljava/lang/StringBuilder;
   28:  ldc     #58; //String ]
   30:  invokevirtual   #51; //Method java/lang/StringBuilder.append:(Ljava/lang
/String;)Ljava/lang/StringBuilder;
   33:  invokevirtual   #36; //Method java/lang/StringBuilder.toString:()Ljava/l
ang/String;
   36:  areturn

}

 可以看jdk会自动优化String相加的代码,因此代码中直接用+操作连接字符串即可,以增加代码可读性。

分享到:
评论

相关推荐

    测试string的+和String.Format()和StringBuilder.Append()性能差距|TestForString.7z

    本测试着重探讨了三种常用的字符串连接方法:`+`运算符、`String.Format()`以及`StringBuilder.Append()`,并分析了它们在性能上的差异。 1. **字符串连接:+ 运算符** 在C#中,`+`运算符可以用于连接两个或多个...

    连接运算符的举例说明,+和&的区别,VB6.0源代码

    在VB6.0编程环境中,连接运算符是用于将字符串或数值组合在一起的关键工具。本文将深入探讨两种主要的连接运算符:`+`和`&`,并提供实例来帮助理解它们之间的区别。 首先,让我们了解`+`运算符。在VB6.0中,`+`...

    String类运算符重载(采用动态内存分配)

    例如,我们希望两个`String`对象可以通过`+`运算符连接起来。这就是运算符重载的用途。 对于`String`类,我们可以这样重载`+`运算符: ```cpp String operator+(const String& other) const { // 创建一个新的...

    string类运算符重载[文].pdf

    String 类运算符重载 在 C++ 编程语言中,String 类是一种基本的数据类型,用于存储字符串。然而,在实际应用中,我们经常需要对字符串进行各种操作,例如字符串连接、字符串比较、字符串删除等等。为了满足这些...

    string类运算符重载.pdf

    "string类运算符重载" 本文主要讲解了C++中string类的运算符重载,包括构造函数、析构函数、拷贝构造函数、赋值函数、字符串相连函数等等。 首先,我们需要了解什么是运算符重载。运算符重载是C++中的一种机制,它...

    string类运算符重载[参考].pdf

    我们重载了“+”运算符,使得我们可以使用“+”来连接字符串。 RString operator+ (const RString &other); 3. 字符串删除运算符重载 我们重载了“-”运算符,使得我们可以使用“-”来删除子串。 RString ...

    C++重载+完成字符串连接

    根据给定的文件信息,本文将详细介绍如何在C++中通过重载加号运算符(+)实现字符串的连接功能。 ### C++中的运算符重载 运算符重载是C++面向对象编程的一个重要特性,它允许程序员改变内置运算符(如+、-、*等)...

    工学面向对象程序设计语言C运算符重载PPT学习教案.pptx

    因此,在设计类 String 时,我们必须增加“ +” 运算符的含义。 运算符重载的概念是指在原来预定义的运算符含义的基础上,再增加对于某个用户定义类型的对象进行操作的新的含义。这就是运算符重载。运算符重载后,...

    区分java中String+String和String+char

    在Java中,如果两个`String`对象通过`+`运算符连接,如`"abc" + '/'`,编译器会自动进行字面量连接优化(String Concatenation Optimization)。这意味着,只要连接的另一侧是字面量字符串(即直接写在代码中的字符...

    Arduino项目开发 Strings_StringAdditionOperator_StringAdditionOperato

    3. **字符串连接操作**:使用`+`运算符可以将两个或多个`String`对象或不同数据类型的值连接起来。例如: - `stringThree = stringOne + 123;` 这行代码将整型数值123添加到`stringOne`的末尾。 - `stringThree = ...

    C++—运算符重载(1)

    那能不能简单地直接用+号连接呢,类似于下面 ’ + ’ 号重载 string a = Hello ; string b = World; cout&lt;&lt; a + b &lt;&lt; endl; 如果直接这样用,那肯定是会报错的 这时候,我们可以重载+号运算符实现...

    JavaScript隐式类型转换代码实例

    数字和字符串如果使用+运算符进行操作,那么会将数字先转换为字符串,然后进行字符串连接操作: var str = string text ; var num = 10; console.log(str + num) // string text 10 (2)布尔值参与的+运算符操作: ...

    C程序设计电子运算符重载PPT学习教案.pptx

    在main函数中,创建了两个String对象demo1和demo2,并通过"+"运算符将它们连接起来,最后输出结果。 而示例7-2展示了如何为Time类重载"+"运算符,实现两个时间的相加。这里,"+"运算符的重载作为一个成员函数,接受...

    java 算术运算符的资源

    - 连接赋值运算符 (+=, -=, *=, /=, %=) 用于简化复合操作。例如,`x += 5;` 相当于 `x = x + 5;` 6. 比较和逻辑运算符: - 虽然算术运算符主要用于数学计算,但Java中还有比较运算符(==, !=, &lt;, &gt;, , &gt;=)和...

    P204~210C++deque学习笔记.docx

    string 字符串拼接操作有多种形式,例如使用 += 运算符重载连接字符串,例如 string& operator+= (const char* str),使用 += 运算符重载连接字符,例如 string& operator+= (const char c),使用 += 运算符重载连接...

    C++程序设计课件 ch10 运算符重载

    例如,对于内置数据类型,加号(+)用于数值相加,而对于字符串类型,则用于连接两个字符串。在C++中,我们也可以对自定义的类进行运算符重载,比如让加号(+)对复数对象执行加法操作。 接下来,我们来讨论运算符...

    第4章C++标准库STLstring类.ppt

    * 连接运算符(+):可以将两个string对象连接起来形成一个新的string对象。 * 比较运算符(==、!=、&lt;、&gt;等):可以比较两个string对象的值。 * 子串运算符([]):可以访问string对象中指定位置的字符。 五、...

    字符串的连接 c++

    在C++中,字符串连接通常通过`+`运算符或`std::string`的`append`成员函数来完成。面向对象编程中,我们还可以通过自定义类的方法来实现字符串的连接功能。 1. **使用`+`运算符连接字符串**:这是最简单直接的方式...

Global site tag (gtag.js) - Google Analytics