String介绍
字符串不可变,它们的值在创建后不能被更改
虽然 String 的值是不可变的,但是它们可以被共享
字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )
string构造方法:
方法名 | 说明 |
---|---|
public String() | 创建一个空白字符串对象,不含有任何内容 |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
String s = “abc”; | 直接赋值的方式创建字符串对象,内容就是abc |
推荐使用直接赋值方式创建字符串
public class StringDemo {
public static void main(String[] args) {
//创建一个空白字符串对象
String s1= new String();
System.out.println("s1" + s1);
//public String(char[] chs)根据字符数组内容,来创建字符串;
char [] chs = {
'a','b','c'};
String s2 = new String(chs);
System.out.println("s2:" + s2);
//public String(byte[] bye)根据字符数组内容,来创建字符串;
byte [] bye = {
65,75,56};
String s3 = new String(bye);
System.out.println("s3:" + s3);
//直接赋值的方式创建字符串对象
String s4 = "abc";
System.out.println("s4:" + s4);
}
}
String对象的特点:
-
通过构造方法创建 通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
-
直接赋值方式创建 以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一 个 String 对象,并在字符串池中维护 。
package com.itxuexi.it08;
public class StringDemo2 {
public static void main(String[] args) {
char [] chs = {
'a','b','c'}; // 内存地址 001
String s1 = new String(chs); // 内存地址 002 ,参考内容来自与001地址的值
String s2 = new String(chs); // 内存地址 003 ,参考内容来自与001地址的值
System.out.println(s1 == s2); //false 内存地址不同
String s3 ="abc"; //出现在常量池 地址004
String s4 ="abc"; //在常量池找到一样的字符串;给与地址004
System.out.println(s3 == s4