String类:字符串的并置、String类的常用方法、new到底创建了几个对象的解释

java 专栏收录该内容
15 篇文章 0 订阅

String常量:

  1. String常量也是String对象,是用双引号括起的字符序列,例如“boy”"12"等等
  2. java会把String常量放入常量池。因为String常量是对象,所以也有自己的引用和实体
  3. 常量池简单理解:常量池中的数据在程序运行期间再也不允许改变

new到底创建了几个对象(String对象的创建):

  1. 例:String string1=new String("abc")
  2. 首先,jvm先去常量池检查是否有”abc“这个常量对象,如果没有,那么jvm就会在常量池创建一个存储“abc”的常量对象,然后执行new操作,再在堆中创建一个存储“abc”的string对象,并把引用赋给string1,所以创建了两个对象;如果常量池中有“abc”这个常量对象,那么就不会再在常量池中创建一个存储“abc”的常量对象了,所以就只创建了一个对象;

字符串的并置:

  1. 例:String str="ni”+“hao"
  2. 等价于String str=”nihao“,jvm并不会在常量池中临时创建”ni“和”hao“这两个常量对象,而是会进行常量优化,去常量池查找”你好“这个常量对象,如果没有就会创建一个。注意的是:如果参与并置的String对象中只要有一个是变量,那么java就会在堆中创建一个新的String对象例如:String string1=”hi“; String string2=string1+”hao“;这个就等价于String string2=new String("nihao”);

String类的常用方法:

  1. public int length():获取String对象的长度;
  2. public boolean equals(Object anObject):比较当前String对象的字符序列是否与参数指定的String对象的字符序列相同
  3. public boolean startsWith(String prefix):判断当前String对象的字符序列前缀是否是参数指定的String对象的字符序列
  4.  public boolean endsWith(String suffix):判断当前String对象的字符序列后缀是否是参数指定的String对象的字符序列
  5. public int compareTo(String anotherString):判断当前String对象的字符序列与参数指定的String对象的字符序列的大小关系。
  6. public boolean contains(CharSequence s):判断当前String对象的字符序列是否包含参数s的字符序列,包含则返回true,否则返回false
  7. public int indexOf(String str):返回首次出现str的字符序列的位置(从0开始),如果没有检索到,返回-1;
  8.  public int lastIndexOf(String str):返回最后一次出现str的字符序列的位置(从0开始),如果没有检索到,返回-1;
  9. public String substring(int beginIndex):返回一个新的字符串对象,新的String对象的字符序列是复制当前String对象的字符序列中的beginIndex位置到最后位置上的字符所得到的字符序列,也可以通过调用substring(int start,int end)来规范最后位置
  10.  public String trim():返回一个当前String对象的字符序列去掉前后空格后的字符序列(注意:只是前后空格,中间空格不能去掉)

示例代码:

public class TestString {
	public static void main(String[] args) {
		String you="你";
		String hi="好";
		String hello1="你"+"好";
		String hello2="你好";
		String hello3=you+"好";
		String hello4=new String("nihao");
		String hello5=new String("nihao");
//		System.out.println(you+"好"=="你好");
		System.out.println(hello1==hello2);//==比较的是对象的引用,如果两者引用相同,即是true;
		System.out.println(hello2==hello3);    
		System.out.println(hello2.equals(hello3)); 
		//String对象的equals方法比较的是String对象的实体(即比较字符串内容是否相同)
		System.out.println(hello4==hello5);
	}
}
//运行结果
true
false
true
false

 

 

 

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值