java中的String及相关知识点

概述

String 在java.lang包下,用时不用导包。
String是字符串。

  • 特点:
    1:String的值在创建之后不可改变。
    2:String虽然在创建之后不可改变但是可以被共享。
    3:底层的实现原理是字节数组(byte[])。

String的常用构造方法:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

String s = "a";
String s2 = s + "";
System.out.println(s == s2);
String s3 = "a" + "";
System.out.println(s2 == s3)

在这里插入图片描述
分析:
对String对象进行 + 操作,实际上,会创建一个临时的StringBuilder对象进行实现拼接操作,用StringBuilder的append()方法拼接完毕,再调用toString()方法返回。

而 对于编译时常量,在编译后直接能计算出拼接后的字符串值,此时不需要再运行时创建临时StringBuilder对象。

于是,第三行String s2 = “a” + “” 就相当于 String s2 = “a”

  • String字符串拼接符 “+”底层原理
    1:字符串常量的拼接
		String str3="hello"+" word!";
		String str4="hello word!";
		System.out.println(str3==str4);
		//运行结果:true

原因:JVM编译器对字符串做了优化,在编译时str3就已经被优化成“hello Word!”,str3和str4指向字符串常量池同一个字符串常量,所以==比较为true。
2:字符串+字符串变量、字符串变量之间的拼接。

		String str1="hello";
		String str2=" word!";
		String str3="hello word!";
		String str4=str1+"word!";
		System.out.println(str3==str4);
		//运行结果为false

原因:字符串拼接时如果有字符串变量参与拼接,底层调用了StringBuffer可变字符串处理。代码如下

		StringBuffer sb=new StringBuffer("");
		sb.append(str1);
		sb.append("word!");
		str4= sb.toString();
//StringBuffer的toString()方法底层new了一个String对象,所以str4在堆内存中重新开辟了空间,
//str3指向常量池,所以为false

StringBuider

在这里插入图片描述
注意因为append 返回的是对象,所以可以使用链式编程。

发布了43 篇原创文章 · 获赞 12 · 访问量 1407

猜你喜欢

转载自blog.csdn.net/qq_42411214/article/details/104411662