Java基础学习笔记之String类

Java基础学习笔记之String类

String简介

String 是 java.lang 包下的一个类,是一种引用数据类型(类,接口,数组)。按照JDK中的定义:String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。 字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

根据JDK的源码:

public final class String    
	implements java.io.Serializable, Comparable<String>, CharSequence {    
	/** The value is used for character storage. */  
	private final char value[];

字符串常量String就是一个char数组,内部封装了一个final修饰的char数组,并且String中所有方法的实现都是对char数组的改变。

String对象初始化

String类常用的构造方法有以下三种:

String(String original)://把字符串数据封装成字符串对象
String(char[] value)://把字符数组的数据封装成字符串对象
String(char[] value, int index, int count)://把字符数组中的一部分数据封装成字符串对象

还可以直接把一个字符串赋值给String类型的变量进行初始化:

String s4 = "hello";

String的特别之处

字符串是一种比较特殊的引用数据类型,直接输出字符串对象输出的是该对象中的数据(其他对象直接输出的是该对象的地址值)。
另外,为了便于字符串常量的共享和复用,在方法区中有一个字符串常量池专门用来存放字符串。

通过构造方法创建与直接赋值创建的字符串对象有什么不同呢?请看下图:
字符串对象构造方法创建和直接赋值的区别
三个字符串存储的都是同一个字符串"hello",但是s1和s2、s3所指向的地址是不同的。String s2 = “hello”; 和 String s3 = “hello”; 都在编译期间生成了字面常量和符号引用,运行期间字面常量 “hello” 被存储在运行时常量池(当然只保存了一份)。通过这种方式来将 String 对象跟引用绑定的话,JVM 执行引擎会先在运行时常量池查找是否存在相同的字面常量,如果存在,则直接将引用指向已经存在的字面常量;否则在运行时常量池开辟一个空间来存储该字面常量,并将引用指向该字面常量。 
 
而通过 new 关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。因此通过 new 来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。但是对于相同的字符串常量,它们最终所指向的都是常量池中的同一个字符串。

(未完待续……)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值