Java String类和常量池
String 部分源码
学习笔记
package cn.jason.oop;
/**
* 测试字符串类的基本语法
* 不可变字符串
* @author Jason
*
*/
public class TestString {
public static void main(String[] args){
String str = "WorkHard";
String str1 = new String("HardWork");
String str2 = "123"+"456";
String str3 = "18" + 19; //这里不是加法,是字符串连接符
System.out.println(str3);
if(str3 instanceof String){
System.out.println("str3是字符串");
}
System.out.println("-------------------------------");
String str10 = "jason";
String str11 = "jason";
String str12 = new String("jason");
System.out.println(str10 == str11);
System.out.println(str10 == str12);//str10 和 str12 不是同一个对象
System.out.println(str10.equals(str12));//所以比较字符串时,使用equals较好
}
}
在Java的内存分析中,我们会经常听到关于“常量池”的描述,实际上常量池也分了以下三种:
1. 全局字符串常量池(String Pool)
全局字符串常量池中存放的内容是在类加载完成后存到String Pool中的,在每个VM中只有一份,存放的是字符串常量的引用值(在堆中生成字符串对象实例)。
2. class文件常量池(Class Constant Pool)
class常量池是在编译的时候每个class都有的,在编译阶段,存放的是常量(文本字符串、final常量等)和符号引用。
3. 运行时常量池(Runtime Constant Pool)
运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中,也就是说,每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致。
String类是我们最常使用的类。字符串类的方法我们必须非常熟悉!我们列出常用的方法,请大家熟悉。
表1 String类的常用方法列表
【示例1】String类常用方法一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
执行结果如图1所示:
图1 示例1运行效果图
【示例2】String类常用方法二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
执行结果如图2所示:
图2 示例2运行效果图