String

本文介绍了 Java 中 String 类的两种创建方式及它们的区别,并对比了三种字符串连接方法:StringBuffer 的 append 方法、+= 运算符及 String 的 concat 方法,揭示了各自的优劣。
摘要由CSDN通过智能技术生成

一.String类的创建

 

 这是我们常见的两种创建字符串的形式。

     String str1 = abc;

 

     String str2 = new String(abc);

 

    

 

     第一种方式创建的字符串会放在栈里,更确切的是常量池中,常量池就是用来保存在编译阶段确定好了大小的数据,一般我们定义的int等基本数据类型就保存在这里。其具体的一个流程就是,编译器首先检查常量池,看看有没有一个“abc”,如果没有则创建。如果有的话,则直接把str1指向那个位置。

 

     第二种创建字符串的方法是通过new关键字,还是java的内存分配,java会将new的对象放在堆中,这一部分对象是在运行时创建的对象。所以我们每一次new的时候,都会创建不同的对象,即便是堆中已经有了一个一模一样的。

 

见如下代码

String str1 = "abc";

String str2 = new String("abc");

 

String str3 = "abc";

String str4 = new String("abc");

 

System.out.println(str1==str2);//输出结果:false

        

System.out.println(str1 == str3);//输出结果:true

System.out.println(str2 == str4);//输出结果:false

 

以上程序中用两种方式创建的4个对象,”==”比较的是地址,从结果可以看到str1str3相同,指向同一个对象。而str2str4比较返回结果是false,说明str2str4指向的不是同一个对象。

 

二.String类的连接方式

  

String类中,我们主要有三种方式来连接字符串

 1.StringBuffer类中的append方法 2.直接用+= 3.String对象的concat方法

如下图所示代码:blob.png


最终的输出结果如下:blob.png



可见concat方法和append方法明显优于+=方法。

作者还注意到一点,多次运行程序,每次需要的时间可能不同……)

 

作者抱着好奇的态度按下了F3去看了StringBuffer类中appendString类中concat方法的源代码.

concat方法的代码

blob.png


append方法的代码:

blob.png

blob.png

  碍于目前作者水平有限,不是特别理解代码的意图。。

如果要叫作者去设计一个更优化的字符串拼接方法。按目前作者的水平估计还实现不了。。

未来作者水平到了!一定回来挑战!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值