String概述
- java.lang.String类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
- Java程序中的所有字符串文字(例如:”abc“)都为此类的对象。
String类的特点详解
- String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。
为什么不能被改变呢?不妨看看下面的代码运行结果是什么。代码如下:
public class demo { public static void main(String[] args) { String name ="传智"; name += "教育"; name += "中心"; System.out.println(name); } }
运行结果如图:
明明原本只有“传智”的,为什么运行显示“传智教育中心”?这不是已经改变了吗?
原因是:
- String变量每次的修改其实都是产生并指向了新的字符串对象。
- 原来的字符串对象都是没有改变的,所以称不可变字符串。
创建字符串对象的2种方式
- 方式一:直接使用 “” 定义。(推荐方式)
- 例如:String name ="传智教育";
- 方法二:通过String类的构造器创建对象。如下图:
代码演示如下:
public class demo { public static void main(String[] args) { //方式一:直接使用双引号得到字符串对象 String name = "我爱你中国"; System.out.println(name); //方式二: // 1.public String():创建一个空白字符串对象,不含有任何内容(几乎不用) String s1 = new String(); System.out.println(s1); //2.public String(String): 根据传入的字符串内容,来创建字符串对象(几乎不用) String s2 = new String("我是中国人"); System.out.println(s2); //3.public String(char[] c):根据字符数组的内容,来创建字符串对象 char[] chars = {'a','b','中','国'}; String s3 = new String(chars); System.out.println(s3); //4.public String(bytr[] b): 根据字节数组的内容,来创建字符串对象 byte[] bytes = {97,98,99,65,66,67}; String s4 = new String(bytes); System.out.println(s4); } }
运行结果如图:
有什么区别吗?(面试常考)
- 以 “” 方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。
- 通过构造器new对象,每new依次都会产生一个新对象,放在堆内存中。
总结:字符串对象特点有哪些?
- 双引号创建的字符串对象,在字符串常量池中存储同一个。
- 通过new构造器创建的字符串对象,在堆内存中分开存储。