java1.6和1.7用+对字符串拼接有区别吗

小编 212

java1.6和1.7用+对字符串怕拼接基本是没有区别的,只是1.8中有很小的区别。“+”默认是java的String类的一种重载,将“+”后面的对象,转换为String类型,然后再进行字符串拼接,其实都是产生了一个新的对象,“+”可以接其它类型。

1.java中“+”的使用

“+”默认是java的String类的一种重载,将“+”后面的对象,转换为String类型,然后再进行字符串拼接,其实都是产生了一个新的对象,“+”可以接其它类型。字符串拼接几种方式的效率:+ < contact < StringBuffer < StringBuilder。

例如:

  • String apple = “Apple,”;
  • String fruit = apple + “Pear,” + “Orange”

其实底层编译器在执行上述代码的时候会的自动引入java.lang.StringBuilder类,上面这个例子中,编译器会创建一个StringBuilder 对象,用来构造最终要生成的String,并为每一个字符串调用一次StringBuilder 中的append() 方法,因此上述代码一共执行了三次append() 方法。最后调用toString 生成最终的结果,并保存为fruit。

但能使用StringBuilder较好不要用“+”,如再循环里+= 连接会在每次循环自动创建一次StringBuilder对象,降低效率。

2.字符串的拼接操作

使用字面量创建字符串是在字符串常量池中,使用new关键字创建的对象是在先创建一个String对象然后在字符串常量池中寻找是否有该字符串常量,若没有则创建该对象,最后让这个String对象字符串常量。两个字面量字符串拼接会在编译期进行优化。

关于含有变量的字符串拼接,如果在JDK5之后是先创建StringBuilder对象,再通过append()方法进行拼接,最后通过toString()方法返回新的字符串对象(跟new String()一致),所以最后返回的对象是创建在堆中的。在JDK5之前使用StringBuffer,其余一样。

String、StringBuffer、StringBuilder的拼接操作如下:

  • String的拼接,创建一个StringBuilder,然后再根据append进行追加,再创建String返回。
  • StringBuilder的拼接,直接进行append拼接,没有syn关键字。
  • StringBuffer的拼接,直接进行append拼接,有syn关键字。

速度上StringBuilder>StringBuffer>String。如果我们已经能预知到字符串的长度,可以在创建的时候就给它更大的空间,省去扩容的花费的时间。StringBuilder默认长度是16,扩容是2倍。可以通过用参数是整形的构造器来让它初始化指定大小的空间。

延伸阅读

java语言的缺点是什么

1.性能比较慢

Java需要在运行时进行解释,这使得它可以在每个操作系统上运行,但也使它的性能比C和C++等语言慢。另一方面,C++程序需要在每个操作系统上编译,直接编译成二进制,因此运行速度更快。

2.内存消耗多

Java 程序在Java 虚拟机之上运行,因此会消耗更多内存。

3.成本比较高

Java编程语言由于其较高的处理和内存要求而有点昂贵。一般需要更好的硬件来运行Java程序。

4.机器交互少

Java在直接与机器交互方面有所欠缺,这使得需要快速运行并直接与机器运行的软件不太可行,因为Java中也缺少显式指针。

5.垃圾收集

Java提供了程序员无法控制的自动垃圾收集。它不提供delete() 和free() 之类的方法来释放内存。

回复

我来回复
  • 暂无回复内容

站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部