最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

Java中关于String类以及字符串拼接的问题 世界新动态

来源:博客园


(资料图片仅供参考)

String类部分源码

//被final修饰不可被继承public final class String    implements java.io.Serializable, Comparable, CharSequence {    //String维护char[] 所以不可修改    private final char value[];

创建String对象的方式

  • str1它首先会去方法区的常量池中找,有“hello”这个对象就直接引用,没有就创建一个新的对象“hello”,存放在常量池中。
  • 而new的方式首先会在堆中创建一个对象,然后再去常量池中找,有直接引用,没有就创建一个新的对象“hello”。

两者区别

  • 直接赋值创建0或1个对象,而new的方式创建1或2个对象。
  • 为了提升Java虚拟机的性能和减少内存的开销,避免字符串的重复创建,尽量少使用new的方式创建String对象

代码分析

public static void main(String[] args) {        String str1 = "hello";//指向常量池中的引用        String str2 = new String("hello");//指向堆中的引用        String str3 = str2;//str3==str2 true        String str4 = "hello";//str1==str4 true    }

字符串拼接

String a="A";String b="B";String c=new String("C");a="A"+b;//变量拼接 指向变为堆中地址a="A"+c;//变量拼接 指向变为堆中地址!a="A"+"A";//常量拼接依旧指向常量池中的地址 a=="AA" truefinal String d="D";//这是常量a="A"+d//a=="AD" true

+号变量拼接底层原理 StringBuidlerd构造初始化容量为16的char[] 然后调用append()进行拼接 最后将结果new String()的形式赋给左边变量

关键词: