Java中的String类字符串类型总结
java字符串概述和特点:
类String在java.lang包里面,所以用的时候不用导包
java中所有“abc”这种形式都作为String类的对象,即使没有new
String字符串的特点:
- 字符串的内容永远不能改变“”双引号写的是什么就是什么
- 因为字符串不可变,所以可以共享使用,节省内存
- 字符串效果上(只是效果上)相当于char[](联想到charAt(i)方法)字符数组,但是底层原理是byte[]字节数组
创建字符串的方式:
- 直接创建
String s1="Rita Love Code";
- 创建空白字符串
String s2=new String(); System.out.println("字符串s2:"+s2);
- 根据字符数组内容创建字符串
char[] charArray={'R','i','t','a'}; String s3=new String(charArray); System.out.println("字符串s3:"+s3);
- 根据字节数组创建字符串
byte[] byteArray={97,98,99}; String s4=new String(byteArray); System.out.println("字符串s:"+s4);
关于字符串常量池(堆里有一块空间作为常量池):
- 只有双引号""直接写的比如("abc")才放在常量池当中,new一个字符串对象,在堆里但是不在常量池里面。
- 基本数据类型==操作比较的是数据本身;引用类型==操作比较的是地址值(即使分别指向的两个数据本身相同,但是地址值不同,返回的仍然是false)。
延伸:基本数据类型和引用数据类型
基本数据类型:数值型(byte.short.int.float等)字符型(char)布尔型(boolean)
引用数据类型:类(String,Person)、接口、数组(char[])
举例:
public static void main(String[] args){
String s1="abc";
String s2="abc";
%堆中的常量池只有一份“abc”这个字符串对象(当然它的最底层也是一个字节数组堆其存储)
%所有这个引用数据类型指向的地址是同一个地址,所以s1,s2==操作时,地址值进行比较,结果为true
char[] charArray={'a','b','c'};
String s3=new String(charArray);
%首先在堆中创建了一个char类型的数组存储【a|b|c】
%new操作的时候char[]字符数组转换为一个byte[]字节数组(因为String字符串类型底层是以byte[]存储)
System.out.println(s1==s2);%true
System.out.println(s1==s3);%false
}