java.lang.String类的使用

java.lang.String类的使用

一、概述

1.声明为final的,不可被继承
2.实现了Serializable接口:表示字符串是支持序列化的;
实现了Comparable接口:表示String可以比较大小
3.String内部定义了final char[ ] value用于存储字符串
4.通过字面量的方式(区别于new给了应该字符串赋值,此时的字符串值声明在字符串常量池中)
5.字符串常量池不会存储相同内容的字符串的。

二、String的不可变性

1.当字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
2.当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
3.当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。

三、String实例化的两种方式

1、通过字面量定义的方式

String s1 = "Ruki";
String s2 = "Ruki";

2、通过new加构造器的方式

String s3 = new String("Ruki");
String s4 = new String("Ruki");
//此时s3和s4保存的地址值,是数据在堆空间中开辟空间以后对应的地址值
System.out.println(s1 == s2);//true
System.out.println(s1 == s3);//false
System.out.println(s1 == s4);//false
System.out.println(s3 == s4);//false

3.比较示例

String s1 = "Ruki";
String s2 = "Koji";

String s3 = "RukiKoji";
String s4 = "Ruki" + "Koji";
String s5 = s1 + "Koji";
String s6 = "Ruki" + s2;
String s7 = s1 + s2;

System.out.println(s3 == s4);//true
System.out.println(s3 == s5);//false
System.out.println(s3 == s6);//false
System.out.println(s3 == s7);//false
System.out.println(s5 == s6);//false
System.out.println(s5 == s7);//false
System.out.println(s6 == s7);//false

String s1 = "RukiKoji";
String s2 = "Ruki";
String s3 = s2 + "Koji";
System.out.println(s1 == s3);//false

final String s4 = "Ruki";//被final修饰后相当于常量
String s5 = s4 + "Koji";
System.out.println(s1 == s5);//true,相当于"Ruki+Koji"

4.String调用包装类的静态方法

例如:parseInt(str)

String str1 = "123";
int num = Integer.parseInt(str1);

String str2 = String.valueOf(num);//"123",调用String重载用valueOf()
String str3 = num + "";

System.out.println(str1 == str3);

5.String与字符数组之间的转换

public void test(){
   String str1 = "abc123";
   char[] charArray = str1.toCharArray();//将String转换成字符串数组
   for(int i = 0; i < charArray.length; i++){
      System.out.println(charArray[i]);
   }
  
   char[] arr = new char[]{'h','e','l','l','o'};
   String str2 = new String(arr);//将字符串数组转化成string,调用String的构造器
   System.out.println(str2);
}

6.与字节数组之间的转换

将String转化成byte[ ] 属于编码过程,反之属于解码过程
解码时,要求解码使用的字符集必须与编码时使用的字符集一致,否则乱码

public void test() throws UnsupportedEncodingException{
   String str1 = "abc123中国"byte[] bytes = str1.getBytes();//使用默认的字符集,进行编码
   System.out.println(Arrays.toString(bytes));

   byte[] gbks = str1.getBytes("gbk");//使用gbk字符集进行编码
   System.ot.println(Array.toString(gbks));
   
   System.out.println("*********************");
   
   String str2 = new String(bytes);//使用默认的字符集进行编码
   System.out.println(str2);

   String str3 = new String(gbks);
   System.out.println(str3);//出现乱码,因为编码和解码的字符集不一致

   String str4 = new Stirng(gbk,"gbk")
   System.out.println(str4);//没出现乱码,因为编码和解码的字符集一致
}

7.与StringBuffer、StringBuilder之间的转化

String转化成StringBuffer、StringBuilder:调用StringBuffer、StringBuilder构造器
反之:调用String构造器或StringBuffer、StringBuilder的toString()

8.JVM中字符串常量池存放位置

jdk1.8中字符串常量池存储在方法区(元空间)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值