Java新人之路 -- String类

本文详细探讨了Java中String类的特性,包括final性质、字符串常量池的工作原理,new关键字与直接赋值创建对象的区别,以及常用的String方法如replace(), substring(), split()等。重点讲解了==和equals()的使用区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String类

1. String类的简述

String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较、查找、截取、大小写转换等操作

要点1. String是final修饰的,所以是最终类,最终类是不能被继承的,既然不能被继承也就意味着里面的方法不能被重写。其成员方法也是如此

要点2. **字符串常量池:**字符串是常量,所有的字符串常量都是存储在常量池中的,每个常量在常量池中都有地址;在常量池中,如果定义的常量在常量池中已经存在,则不会再进行创建,而是直接拿来用,如果不存在就创建一个常量扔进常量池

要点3. 字符串对象的创建 1、字符串本身是引用数据类型,可以通过new关键字进行对象的创建 2、字符串又比较特殊,它也可以直接赋值的形式进行字符串对象的创建

上述的区别在哪里呢? API中说明:字符串都是常量 字符串常量都在常量池(方法区)中存储,是有自己的地址的,通过new关键字创建出来的对象在堆内存中

举例说明

在这里插入图片描述

注意点: ==和equals的区别 ?

==用于基本数据类型时比较的是值,用于引用数据类型比较的时地址;

equals在字符串中是先比较地址后比较内容

public static void method2() {
	String str = new String("new的字符串对象");
	String str2 = new String("new的字符串对象");
	System.out.println(str == str2);// false  因为是两个对象,地址不同
	String str3 = "直接赋值的字符串对象";
	String str4 = "直接赋值的字符串对象";
	System.out.println(str3 == str4);// true 因为"直接赋值的字符串对象"在常量池中被str3创建,然后直接被str4拿走了地址,在常量池中是同一个常量
	

	String str5 = "hello";
	String str6 = "world";
	String str7 = "helloworld";
	String str8 = str5 + str6;// 对已经创建好的对象进行了拼接
	System.out.println(str7 == str8);// false str8是两个对象的拼接,str7是一个对象
	System.out.println(str7.equals(str8));// true  equals在字符串中是先比较地址后比较内容
	

	String str0 = "a" + "b" + "c";// 先拼接再创建对象所以str0实际还是等于"abc"
	String str01 = "abc";
	System.out.println(str0 == str01);// true  值相同
	System.out.println(str0.equals(str01));// true

}
2. String类的常用方法
/**
 * String中由于且常用的方法
 */
    public static void Method2() {
    // replace() 替换
    	String url = "http://www.news.baidu.com";
    	String newUrl = url.replace("baidu", "jd");
    	System.out.println(newUrl);//输出http://www.news.jd.com

	String mum = "一二3三3四五3六七3八"; 
	// substring() 截取 如果只有一个参数,代表开始,直到末尾结束
	System.out.println(mum.substring(5));//输出   四五3六七3八
	// substring() 截取 如果有两个参数,参数一代表开始,参数二代表结束位置(不包含)
	System.out.println(mum.substring(3, 7));//输出    三3四五
	// 注意角标从0开始,此处的3对应的是数组的四
	System.out.println(mum.substring(4, mum.length()));//输出   3四五3六七3八
	// spilt() 分割 参数代表要拆分的依据
	String[] urlArr = url.split("b");
	System.out.println(urlArr[urlArr.length - 1]);//输出  aidu.com
	// 减号后的数字代表被参数划分后的第几部分,倒着数
	String[] mumArr = mum.split("3");
	System.out.println(mumArr[mumArr.length - 5]);//输出  一二
}
3. String类的一般方法
/**
 * String中有用且不是很常用的方法
   */
   public static void Method3() {
   String str = "herbert bo";
   System.out.println("指定索引出的char值" + str.charAt(1));//输出  指定索引出的char值e
   System.out.println("指定char值对应的索引:" + str.indexOf('b'));//输出  指定char值对应的索引:3
   System.out.println("指定char值对应的索引:" + str.lastIndexOf('b'));//输出  指定char值对应的索引:8

   String compare1 = "agc";
   String compare2 = "abc";
   // .compareTo对两个字符进行对比,计算char值的差,从第一位开始,如果第一位有差就输出差,第一位一样就计算第二位
   System.out.println(compare2.compareTo(compare1));//输出  -5, 因为compare2中的b比compare1中的g小5
   // .concat和拼接类似  
   System.out.println(compare2.concat(compare1));//输出  abcagc
  
  // .contains
   System.out.println("是否包含指定的字符串:" + str.contains("hello"));//输出   是否包含指定的字符串:false
   
   String url = "https://www.baidu.com";
   // 是否以指定的头和尾
   System.out.println(url.endsWith("cn"));//输出  false
   System.out.println(url.startsWith("http"));//输出  true
 
   System.out.println("判断字符串是否为空字符:" + "".isEmpty());

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值