入门篇-其之四-字符串String的简单使用
本文最后更新于:2025年4月6日
本文中使用到的工具是JDK 8,需要安装的小伙伴请点击右侧连接查看教程:点我查看安装JDK8教程。
一、什么是字符串?
在Java编程语言中,字符串用于表示文本数据。
字符串(String
)属于引用数据类型,根据String
的源码,其头部使用class
进行修饰,属于类,即引用数据类型。
二、字符串的表示
字符串使用双引号""
表示,在双引号中你可以写任意字符。
和前面定义并初始化基本数据类型的变量一样,定义最简单的字符串可以用如下方式:
1 |
|
以下是示例代码:
1 |
|
输出结果:
三、转义字符
使用\
和某个特定字符可以更改其原有的字符含义。
例如:
\n
能够换行(相当于按了一下Enter键);\t
具有制表符效果(相当于按了一下Tab键);
1 |
|
运行结果:
前面我们说过,字符串是使用英文的双引号表示,如果我想在双引号内直接输出双引号会报错,例如:
1 |
|
那么,如果我们需要在双引号内部表示出字符串怎么办?使用\"
表示双引号,如果想要表示反斜杠(Windows的文件路径会使用到),要写成\\
。
以下是示例代码:
1 |
|
运行结果:
四、字符串的简单应用
4.1 获取字符串的长度
字符串的长度取决于字符串中写了多少个字符(转义字符算一个字符),如果是空字符串,那么字符串的长度为0。
可以使用**length()
方法获取当前字符串的长度**。
1 |
|
4.2 字符串的简单拼接
假设当前有两个字符串str1
和str2
,二者的值分别是"窈窕淑女"
和"君子好逑"
,如果我想将二者拼接成一个字符串该怎么办?
可以使用+
拼接两个字符串。注意:这里的+
并不是算术意义上的加号,它在字符串中只负责拼接的作用。只要+
一侧有字符串,那么这个+
就会将另一侧的数据类型变为字符串类型。
1 |
|
运行结果:
后四个输出结果中我们可以得知:+
右侧的基本数据类型自动转换成字符串,然后+
对左右两侧的字符串进行拼接形成新的字符串进行输出。
但与此同时,我们也发现另外一种情况:System.out.println(myString1 + 'A' + 20);
,它得到的结果是窈窕淑女A20
,如果我想对后两者先计算后拼接,可以直接使用小括号对后两者优先计算:
1 |
|
此时加上括号以后,会先计算'A'
和20
相加的结果,此时'A'
会自动提升为int
类型的值为65
,65
和20
相加的结果就是85
,输出结果就是85
前期学习过程中,使用+
拼接字符串比较方便。当然,在后续深入学习字符串的过程中,我们会使用比+
更加高效的方法。
五、类和对象简介
前面我们提过,引用数据类型一共分为5种:类、接口、数组、枚举、注解。
类(Class)和对象(Object)是面向对象编程的两个核心概念。
类是对现实世界事物的抽象,它是一种定义了属性(Fields)和方法(Methods)的蓝图和模板,用于创建对象。
属性(Fields)是类中的变量,它们用于存储对象的状态和特征。
方法(Methods)是一种可重用的代码块,它用于执行特定的任务操作。方法是类和对象的一部分,它规定了如何执行特定的操作和计算。一个方法包含如下部分:
- 方法名:用于描述方法的功能。
- 返回类型:指定方法的返回值的数据类型。如果方法没有任何返回值,返回类型为
void
。 - 参数列表:包含方法需要的输入值,如果有多个参数,它们使用逗号进行分隔。
- 方法体:包括方法执行代码,通常包含一系列的语句。
我们可以定义一个Keyboard
(键盘)类,这个类具有如下属性:键盘的宽度width
、高度height
、重量weight
、颜色color
、轴体数量count
(87键、108键等)。方法有:开启键盘背景灯turnOnBackLight
、敲击某个键click
创建一个键盘类Keyboard
,类是由class
修饰的,类名要符合标识符命名规范:
1 |
|
在这个类中,我们可以定义上述属性,轴体数量count
为int
类型、键盘宽度、高度、重量为double
类型,其他的都为String
类型。在类中定义如下属性:
1 |
|
键盘有如下功能:敲击click
、开背景灯turnOnBackLight
,这两项功能可以写进类,在类中作为方法存在:
1 |
|
至此,“键盘”这张图纸(模板)就创建好了。
在这个类中,我们发现两个方法的返回值类型都为void
,方法体的功能都是输出一句话。其中click
方法传入了一个char
类型的值。在方法上建议编写注释,便于了解这个方法的功能。
对象(Object)是类的实例。创建对象的过程称为实例化。每个对象都有其自身的属性和方法,这些属性和方法定义在类中。在Java中,每个对象都有一个引用变量,该变量存储对象的内存地址。通过引用变量,可以访问和修改对象的属性和方法。
我们可以利用上述图纸来打造一款键盘(创建对象)了,使用**new
**关键字来创建对象:
1 |
|
运行结果:
创建对象以后,依照目前编写的代码来看,我们可以直接使用**对象名.属性名
**获取到属性值。
在分割线之前的输出中,我们并没有给每一个属性进行赋值,因此在分割线之前输出的是各种类型的默认值:整数类型默认值是0,浮点类型默认值为0.0,字符类型默认值是Unicode字符表的第一个字符,布尔类型默认值是false
,引用数据类型的默认值为null
(null
在后面会讲到)。
因此:前三个属性在类中是double
类型,所以输出的值都是0.0,String
为引用数据类型,输出结果为null
,最后一个为int
类型,输出默认值为0。
分割线后五行我们为属性进行赋值,此时分割线后五行的内容就是我们赋值后的结果。
对象在调用方法时使用**对象名.方法名
,如果方法在定义时有相应类型的参数,则传入参数值的顺序、数量、类型必须和类中定义的方法保持一致**。在上述测试代码中,调用了无参的turnOnBackLight
方法和一个参数的click
方法,在类中定义的click
方法有一个char
类型的参数,因此传入的值必须是char
类型,因此将字符'D'
传入click
方法是正确的。
当然,这一部分只是类和对象的冰山一角,更具体的内容需要到后续的文章中继续学习。
六、引用数据类型默认值:null
6.1 null的定义与使用
null
是Java的关键字,只能小写,不可随意更改。对于Java程序员来说,null
是一个令人反感(咬牙切齿)的存在。
null
主要是用在引用对象无法确定的情况。比如说,我在main
方法中定义一个字符串,但是这个字符串具体值是什么无法确定,但是在方法中只定义变量而不赋值是不能通过编译的,此时我们可以使用null
赋值给字符串对象。
null
是引用数据类型的默认值。以String
类为例,String
就是一个引用数据类型,因此将null
赋值给String
类型的变量是合法的:
1 |
|
null
并不是一个有效的对象实例,如果给一个对象赋值为null
,那么当前对象引用当前不引用对象。
"iCode504"
是在内存中实际存在的字符串,它在内存表现形式如下:
如果将str
赋值为null
,那么它不会指向堆内存中的对象。也就是说,在堆内存中原有的字符串对象会等待JVM(Java虚拟机)垃圾回收机制进行回收。
null
不可以赋值给基本数据类型的变量。以下的写法都是错误的:
1 |
|
如果引用数据类型的变量值为null
,直接调用引用数据类型的方法会产生空指针(NullPointerException,臭名昭著)异常:
1 |
|
运行结果:
6.2 空字符串与null的区别
在Java中,空字符串""
和null
是两种不同概念,它们在内存中表示和处理方式有很大区别。
空字符串""
:在Java中,空字符串是一个包含0个字符的字符串示例。当我们创建一个空字符串变量时,它会在内存中占用空间,并且这个对象是分配给String
对象的。例如:
1 |
|
上面代码中,str
是指向String
对象的引用,而这个String
对象在内存中会占用一定的空间,只是它包含的字符数为0。以下是String str = "";
在JDK 8版本中,内存简要存储情况图:
null
:在Java中,null
和0~9
一样都是字面值,表示对象引用不指向任何对象,null
是一个特殊值,表示一个引用类型变量没有实际值,声明一个引用类型变量但是不给变量赋值,它的默认值就是null
。例如:
1 |
|
运行结果:
总结:空字符串""
是一个包含0个字符的字符串实例,它在内存中占用空间。而null
是一个字面值,表示对象引用不指向任何对象。
6.3 null的其他作用
1. 可以使用比较运算符==
来判断一个引用数据类型是否为null
,例如:
1 |
|
2. null
本身不是对象,也不是任何类型的实例。我们可以使用instanceof
运算符判断引用数据类型变量或值是否属于当前类型,此时我们使用null
来判断它是否属于Object
类型:
1 |
|
运行结果:
Object类是所有类的父类,而输出结果中我们也可以判断出null
不属于Object
类型,它不属于任何类型的实例。
关于null的更多知识,详见如下文章:深入关键字null、java中的null类型—有关null的9件事