String类的重要性
在实际项目以及面试过程中,String类都是热点、必学点。String是一个必须使用的程序类,可以说是项目的核心组成类。在Java程序里所有的字符串都要求是“”进行定义,同时也可以利用“+”实现字符串的连接处理,但是对于String类实际上还有其自身的特点,本文通过具体的实例和概念进行String类的特点分析。
String类对象实例化
定义
在Java中并没有字符串这一数据类型的存在,但是考虑到陈旭开发的需要,所以通过设计的形式提供了String类,并且该类的对象可以通过直接赋值的形式进行实例化的操作。
代码示例
实例1
public
static
void
main
(
Stream
args
[]){
String
str
=
"欢迎关注Java编程中心"
;
//string类对象实例化
System
.
out
.
println
(
str
);
}
}
//执行结果
欢迎关注
Java
编程中心
观察Stream类的源代码实现
两者比较
说明:程序中对于字符串的实现都是通过数组的形式进行保存的,所以对于Stream类的内部也会保存有数组内容,这一点可以通过Stream类源代码观察到。
JDK1.8以前String保存的是字符数组private final char value[];
JDK1.9以后String保存的是字节数组 private final byte[] value[];
总结:为了方便读者比对JDK版本,在此给出了JDK1.8以前和JDK1.9之后的String类内部数组定义形式,可以发现JDK1.9之后Stream类中的数组类型为byte。这样就可以得出一个结论:字符串就是对数组的一种特殊包装应用,而对数组而言最大的问题在于长度固定。
String本身属于一个系统类,除了可以利用直接赋值的形式进行实例化之外,同时也提供了相应的构造方法进行实例化,构造方法定义如下:
String类的构造方法:public String(String str).
代码示例
实例2
public
static
void
main
(
Stream
args
[]){
String
str
=
new
String
"欢迎关注Java编程中心"
;
//string类对象实例化
System
.
out
.
println
(
str
);
}
}
//执行结果
欢迎关注
Java
编程中心
字符串比较
基本数据类型的相等判断可以直接使用Java中提供的“==”运算符来实现,直接进行数值的比较。如果在Stream类对象上使用“==”比较的将不是内容,而是字符串的堆内存地址。
代码实例3
public
static
void
main
(
String args
[]){
String
strA
=
"欢迎关注"
;
//直接赋值定义字符串
String
strB
=
new
String(
"欢迎关注"
);
//构造方法定义字符串
Stream
strC
=
"编程中心"
;
Stream
strC
=
strD
;
System
.
out
.
println
(
strA
=
strB
);
//false
System
.
out
.
println
(
strA
=
strC
);
//false
System
.
out
.
println
(
strC
=
strB
);
//false
System
.
out
.
println
(
strC
=
strD
);
//true
}
}
本程序在String类的对象上使用了“==”比较,通过结果发现对于同一个字符串采用不同方法进行String类对象实例化,并不是所有String类对象的地址值都是相同的。
对于字符串内容的判断,在String类中已经定义提供了相应的equals()方法,只需要通过String类实例化对象调用即可。该方法定义如下:字符串内容相等判断(区分大小写):public bolean equals(Object obj).
让心情去旅行
提示1:关于equals()方法的使用。在Stream类中定义的equals()方法里面需要接受的数据类型为Object,简单理解为,调用Stream类equals方法只需要传入字符串即可。
两者区别
关于“==”与equals()的区别使用。“==”是Java提供的关系运算符,主要功能是数值相等判断,比较的是内存地址。equals()是Stream类提供的一个方法,比较的是内容。
字符串常量
在程序中常量是不可以被改变的内容的统称,但是因为由于Java中的处理支持,所以可以直接使用“"”进行字符串常量的定义。而这种字符串的常量,严格意义上来讲是String类的匿名对象。
关于字符串对象池
实际上,在JVM底层存在有一个对象池(String只是对象池中保存的一种类型,此外还有多种其它类型)。当代码使用了直接赋值的方式定义了一个String类对象时,会将此字符串对象所使用的匿名对象入池保存,如果后续还有其它String类对象也采用了直接赋值的方式,并且设置了同样内容,那么将不会开辟新的内存空间,而是使用了已有的对象进行引用的分配,从而继续使用。
java培训学校:http://www.baizhiedu.com/java2019