文章目录
- 一、String 类概述
- 二、String 创建对象的方式
- 2.1 创建对象的两种方式
- 2.2 面试:两种方式的区别 ★
- 2.3 常见面试题 ★
- 三、String 类常用方法
- 3.1 字符串内容比较
- 3.2 常用 API:遍历、截取、替换、分割
一、String 类概述
java.lang.String 类代表字符串,它定义的变量可以指向一个字符串对象。同时 String 类提供了很多操作字符串的功能,我们可以直接使用。
String 是不可变字符串:String 变量每次的修改其实都是产生并指向了新的字符串对象,而原来的字符串对象都是没有改变的,所以称不可变字符串。
如下方程序,首先在字符串常量池中,创建 “传智” 对象,并指向该对象。当执行 name+=“教育” 时,首先在常量池中创建 “教育” 对象,并将 “传智” 与 “教育” 两个对象拼接生成 “传智教育” 对象,并指向该对象。以此类推…
每当用 + 符号,拼接生成新的字符串时,原来的字符串都没有改变,因此 String 是不可变字符串。
二、String 创建对象的方式
2.1 创建对象的两种方式
-
方式一:直接使用 " " 定义(推荐方式)
String name = “黑马”;
-
方式二:通过 String 类的构造器创建对象
2.2 面试:两种方式的区别 ★
- 双引号 " " 给出的字符串对象,存在于堆内存中的常量池中,相同内容只会存储一份。
- new 字符串对象,每new一次都会在堆内存中产生一个字符串对象。
2.3 常见面试题 ★
- 下列代码的运行结果是?
String s2 = new String(“abc”);
:先去常量池中创建对象,然后再通过 new 创建对象。
String s1 = “abc”;
:由于常量池中有对象,所以不需创建对象。
扩展: 若先执行String s1 = “abc”;
,再执行String s2 = new String(“abc”);
,则 s1 与 s2 分别创建一个对象。
- 下列代码的运行结果是?
s3 不在常量池中,即不是双引号直接给出的,不会放在常量池中。
扩展: 程序总共创建四个对象,其中常量池中分别有:“abc”、“ab”、“c”,不在常量池中 “abc”。
- 下列代码的运行结果是?
java 存在编译优化机制,程序在编译时,自动将 “a”+“b”+“c” 直接转换成 “abc”。
三、String 类常用方法
3.1 字符串内容比较
== 判断字符串对象是判断地址的,这样会引起很多业务问题。推荐使用 equals 方法比较:
注:基本数据类型用 == 比较。
3.2 常用 API:遍历、截取、替换、分割
举例:
String str = "abcdefg";
String s1 = "cde";
String s2 = "ggg";
String replaceStr = str.replace(s1, s2);
System.out.println(replaceStr); // abgggfg
文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)