优秀网站共分享,新闻类的网站如何做优化、,建网站做淘宝客,程序员接外包网站什么是字符串#xff1f;
在Java编程语言中#xff0c;字符串用于表示文本数据。
字符串#xff08;String#xff09;属于引用数据类型#xff0c;根据String的源码#xff0c;其头部使用class进行修饰#xff0c;属于类#xff0c;即引用数据类型。 字符串的表示
…什么是字符串
在Java编程语言中字符串用于表示文本数据。
字符串String属于引用数据类型根据String的源码其头部使用class进行修饰属于类即引用数据类型。 字符串的表示
字符串使用双引号表示在双引号中你可以写任意字符。
和前面定义并初始化基本数据类型的变量一样定义最简单的字符串可以用如下方式
String 变量名 任意字符;以下是示例代码
/*** 字符串最简单的定义** author iCode504* date 2023-09-09 09:30:37*/
public class MyFirstString {public static void main(String[] args) {// 定义并初始化String类型的变量String myString 浔阳江头夜送客枫叶荻花秋瑟瑟。;System.out.println(myString);myString 主人下马客在船举酒欲饮无管弦。;System.out.println(myString);// 当然你也可以不在双引号中写任意内容即“空字符串”myString ;System.out.println(myString);// 直接输出字符串System.out.println(醉不成欢惨将别别时茫茫江浸月。);}
}输出结果 转义字符
使用\和某个特定字符可以更改其原有的字符含义。
例如\n能够换行相当于按了一下Enter键\t具有制表符效果相当于按了一下Tab键。
/*** 转义字符--换行符\n和制表符\t的使用** author iCode504* date 2023-09-09 11:49:18*/
public class EscapeCharacters {public static void main(String[] args) {// 换行符String myString1 窈窕淑女\n寤寐求之;// 制表符String myString2 求之不得\t寤寐思服;System.out.println(myString1);System.out.println(myString2);}
}运行结果 前面我们说过字符串是使用英文的双引号表示如果我想在双引号内直接输出双引号会报错例如
// 错误写法因为最左侧的双引号只能识别到最近的双引号其他双引号会导致无法识别而无法通过编译
String myString 悠哉游哉辗转反侧是《诗经》中经典名句;那么如果我们需要在双引号内部表示出字符串怎么办使用\表示双引号如果想要表示反斜杠Windows的文件路径会使用到要写成\\。
以下是示例代码
/*** 转义字符--双引号和反斜杠的输出** author iCode504* date 2023-09-09 16:23:48*/
public class EscapeCharacters1 {public static void main(String[] args) {// shiyong\表示双引号String myString1 \悠哉游哉辗转反侧\是《诗经》中经典名句;System.out.println(myString1);// \\表示反斜杠String myString2 参差荇菜\\左右采之;System.out.println(myString2);}
}运行结果 字符串的简单应用
获取字符串的长度
字符串的长度取决于字符串中写了多少个字符转义字符算一个字符如果是空字符串那么字符串的长度为0。
可以使用**length()方法获取当前字符串的长度**。
/*** 字符串长度获取** author iCode504* date 2023-09-09 09:44:37*/
public class StringLength {public static void main(String[] args) {String myString 关关雎鸠在河之洲。;// 获取字符串的长度双引号内所有字符的数量int length myString.length();System.out.println(length);myString ;// 获取空字符串的长度length myString.length();System.out.println(length);// 转义字符算一个字符myString E:\\Code;length myString.length();System.out.println(length);}
}字符串的简单拼接
假设当前有两个字符串str1和str2二者的值分别是窈窕淑女和君子好逑如果我想将二者拼接成一个字符串该怎么办
可以使用拼接两个字符串。注意这里的并不是算术意义上的加号它在字符串中只负责拼接的作用。只要一侧有字符串那么这个就会将另一侧的数据类型变为字符串类型。
/*** 使用拼接字符串** author iCode504* date 2023-09-09 11:14:46*/
public class StringSplicing1 {public static void main(String[] args) {String myString1 窈窕淑女;String myString2 君子好逑;// 两个字符串拼接结果仍为字符串String result myString1 myString2;System.out.println(result);System.out.println(--------------------);// 字符串拼接基本数据类型的数据System.out.println(myString1 20);System.out.println(myString1 A 20);System.out.println(myString1 20.34);System.out.println(myString1 true);}
}运行结果 后四个输出结果中我们可以得知右侧的基本数据类型自动转换成字符串然后对左右两侧的字符串进行拼接形成新的字符串进行输出。
但与此同时我们也发现另外一种情况System.out.println(myString1 A 20);它得到的结果是窈窕淑女A20如果我想对后两者先计算后拼接可以直接使用小括号对后两者优先计算
System.out.println(myString1 (A 20));此时加上括号以后会先计算A和20相加的结果此时A会自动提升为int类型的值为6565和20相加的结果就是85输出结果就是85
前期学习过程中使用拼接字符串比较方便。当然在后续深入学习字符串的过程中我们会使用比更加高效的方法。
类和对象简介
前面我们提过引用数据类型一共分为5种类、接口、数组、枚举、注解。
类Class和对象Object是面向对象编程的两个核心概念。
类是对现实世界事物的抽象它是一种定义了属性Fields和方法Methods的蓝图和模板用于创建对象。 属性Fields是类中的变量它们用于存储对象的状态和特征。 方法Methods是一种可重用的代码块它用于执行特定的任务操作。方法是类和对象的一部分它规定了如何执行特定的操作和计算。一个方法包含如下部分 方法名用于描述方法的功能。返回类型指定方法的返回值的数据类型。如果方法没有任何返回值返回类型为void。参数列表包含方法需要的输入值如果有多个参数它们使用逗号进行分隔。方法体包括方法执行代码通常包含一系列的语句。
我们可以定义一个Keyboard键盘类这个类具有如下属性键盘的宽度width、高度height、重量weight、颜色color、轴体数量count87键、108键等。方法有开启键盘背景灯turnOnBackLight、敲击某个键click
创建一个键盘类Keyboard类是由class修饰的类名要符合标识符命名规范
public class Keyboard {}在这个类中我们可以定义上述属性轴体数量count为int类型、键盘宽度、高度、重量为double类型其他的都为String类型。在类中定义如下属性
public class Keyboard {// 键盘宽度double width;// 键盘高度double height;// 键盘重量double weight;// 键盘颜色String color;// 按键数量int count;
}键盘有如下功能敲击click、开背景灯turnOnBackLight这两项功能可以写进类在类中作为方法存在
/*** 键盘类--包含属性和方法** author iCode504* date 2023-09-10 10:44:25*/
public class KeyBoard {// 键盘宽度double width;// 键盘高度double height;// 键盘重量double weight;// 键盘颜色String color;// 键盘数量int count;/*** 开启键盘背景灯的方法*/public void turnOnBackLight() {System.out.println(开启键盘灯);}/*** 敲击键盘某个键的方法** param key 传入敲击的单个字符*/public void click(char key) {System.out.println(敲击了 key 键);}
}至此“键盘”这张图纸模板就创建好了。
在这个类中我们发现两个方法的返回值类型都为void方法体的功能都是输出一句话。其中click方法传入了一个char类型的值。在方法上建议编写注释便于了解这个方法的功能。
对象Object是类的实例。创建对象的过程称为实例化。每个对象都有其自身的属性和方法这些属性和方法定义在类中。在Java中每个对象都有一个引用变量该变量存储对象的内存地址。通过引用变量可以访问和修改对象的属性和方法。
我们可以利用上述图纸来打造一款键盘创建对象了使用**new**关键字来创建对象
/*** 创建键盘类对象并为属性赋值** author iCode504* date 2023-09-10 10:48:45*/
public class MyKeyBoardTest1 {public static void main(String[] args) {KeyBoard keyBoard new KeyBoard();System.out.println(keyBoard.width);System.out.println(keyBoard.height);System.out.println(keyBoard.weight);System.out.println(keyBoard.color);System.out.println(keyBoard.count);System.out.println(----------分割线----------);keyBoard.width 35.55;keyBoard.height 12.22;// 重量按公斤算keyBoard.weight 2.02;keyBoard.color 天蓝色;keyBoard.count 87;System.out.println(键盘的宽度是: keyBoard.width cm);System.out.println(键盘的高度是: keyBoard.height cm);System.out.println(键盘的重量是: keyBoard.weight kg);System.out.println(键盘的颜色是: keyBoard.color);System.out.println(键盘一共有 keyBoard.count 个键);keyBoard.turnOnBackLight(); // 调用开启键盘背景灯的方法keyBoard.click(D); // 调用按下某个键的方法}
}运行结果 创建对象以后依照目前编写的代码来看我们可以直接使用**对象名.属性名**获取到属性值。
在分割线之前的输出中我们并没有给每一个属性进行赋值因此在分割线之前输出的是各种类型的默认值整数类型默认值是0浮点类型默认值为0.0字符类型默认值是Unicode字符表的第一个字符布尔类型默认值是false引用数据类型的默认值为nullnull在后面会讲到。
因此前三个属性在类中是double类型所以输出的值都是0.0String为引用数据类型输出结果为null最后一个为int类型输出默认值为0。
分割线后五行我们为属性进行赋值此时分割线后五行的内容就是我们赋值后的结果。
对象在调用方法时使用**对象名.方法名**如果方法在定义时有相应类型的参数则传入参数值的顺序、数量、类型必须和类中定义的方法保持一致。在上述测试代码中调用了无参的turnOnBackLight方法和一个参数的click方法在类中定义的click方法有一个char类型的参数因此传入的值必须是char类型因此将字符D传入click方法是正确的。
当然这一部分只是类和对象的冰山一角更具体的内容需要到后续的文章中继续学习。
引用数据类型默认值null
null的定义与使用
null是Java的关键字只能小写不可随意更改。对于Java程序员来说null是一个令人反感咬牙切齿的存在。
null主要是用在引用对象无法确定的情况。比如说我在main方法中定义一个字符串但是这个字符串具体值是什么无法确定但是在方法中只定义变量而不赋值是不能通过编译的此时我们可以使用null赋值给字符串对象。
null是引用数据类型的默认值。以String类为例String就是一个引用数据类型因此将null赋值给String类型的变量是合法的
String str iCode504;
// 将null赋值给String
str null;null并不是一个有效的对象实例如果给一个对象赋值为null那么当前对象引用当前不引用对象。
iCode504是在内存中实际存在的字符串它在内存表现形式如下 如果将str赋值为null那么它不会指向堆内存中的对象。也就是说在堆内存中原有的字符串对象会等待JVMJava虚拟机垃圾回收机制进行回收。 null不可以赋值给基本数据类型的变量。以下的写法都是错误的
// 以下写法都是错误的因为null只能赋值给引用数据类型
byte byteValue null;
short shortValue null;
int intValue null;
long longValue null;
float floatValue null;
double doubleValue null;
char charValue null;
boolean booleanValue null;如果引用数据类型的变量值为null直接调用引用数据类型的方法会产生空指针NullPointerException臭名昭著异常
/*** 引用数据类型的默认值--null** author iCode504* date 2023-09-10 09:37:32*/
public class NullValue {public static void main(String[] args) {// 引用数据类型的默认值赋值给String是合法的String str null;System.out.println(str);// 间接调用null会出现NullPointerException空指针异常开发过程中要尽量避免这种情况的发生int length str.length();System.out.println(length);}
}运行结果 空字符串与null的区别
在Java中空字符串和null是两种不同概念它们在内存中表示和处理方式有很大区别。
空字符串在Java中空字符串是一个包含0个字符的字符串示例。当我们创建一个空字符串变量时它会在内存中占用空间并且这个对象是分配给String对象的。例如
String str ;上面代码中str是指向String对象的引用而这个String对象在内存中会占用一定的空间只是它包含的字符数为0。以下是String str ;在JDK 8版本中内存简要存储情况图 null在Java中null和0~9一样都是字面值表示对象引用不指向任何对象null是一个特殊值表示一个引用类型变量没有实际值声明一个引用类型变量但是不给变量赋值它的默认值就是null。例如
public class Cat {String name; // 不给name属性赋值创建Cat对象并调用这个属性默认输出为null
}class CatTest {public static void main(String[] args) {Cat cat new Cat();System.out.println(cat.name); // 输出结果为null}
}运行结果 总结空字符串是一个包含0个字符的字符串实例它在内存中占用空间。而null是一个字面值表示对象引用不指向任何对象。
null的其他作用
1. 可以使用比较运算符来判断一个引用数据类型是否为null例如
String str null;
System.out.println(null str); // 判断引用数据类型String是否为null2. null本身不是对象也不是任何类型的实例。我们可以使用instanceof运算符判断引用数据类型变量或值是否属于当前类型此时我们使用null来判断它是否属于Object类型
/*** null是否属于Object类型** author ZhaoCong* date 2023-09-10 10:39:02*/
public class NullTypeCheck {public static void main(String[] args) {if (null instanceof Object) {System.out.println(null属于Object类型);} else {System.out.println(null不属于Object类型);}}
}运行结果 Object类是所有类的父类而输出结果中我们也可以判断出null不属于Object类型它不属于任何类型的实例。
关于null的更多知识详见如下文章深入关键字null、java中的null类型—有关null的9件事