💕"不要同情自己,同情自己是卑劣懦夫的勾当!"💕
作者:Mylvzi
文章主要内容:JavaSE学习值之--String类
前言:
在C语言中我们已经接触过字符串,在C语言中不存在字符串类型,存储字符串往往是通过字符数组或字符指针,同时C语言的库中也提供了很多与字符串有关的函数,如strcpy,strcat,strstr等等,但是这种将数据和操作方法分割的做法不符合面向对象编程的思想,所以在Java中提供了字符串类型--》String
String类本质上是class,含有属性和方法,方法之中存放了大量且实用的与字符串有关的方法
下面就为大家详细讲解String类
一.String类
1.String类的属性
注意:Java中的字符串区别于C语言,并不存在“字符串以\0结尾”这种说法
2.字符串的构造
下面介绍常见的三种字符串构造方法:
/** * 字符串构造 */ // 1.直接构造 String str1 = "hello"; System.out.println(str1); // 2.实例化一个String类对象 String str2 = new String("hello"); System.out.println(str2); // 3.通过字符数组的转化 char[] arr = {'h','e','l','l','o'}; String str3 = new String(arr); System.out.println(str3);
注意Java中String类是一种引用数据类型,存放的引用对象的地址,而不存储对象本身
// String类是一种引用类型,存储的是对象的地址 // s1和s2引用的是不同对象 s1和s3引用的是同一对象 String s1 = new String("hello"); String s2 = new String("world"); String s3 = s1; System.out.println(s1.length()); // 获取字符串长度---输出5 System.out.println(s1.isEmpty()); // 如果字符串长度为0,返回true,否则返回false
注意:
1.String类有求字符串长度的方法通过:str.length()
STtring类里面的length是一种方法,数组里面的是一种属性,方法有一个();
2.isEmpty方法用于判断字符串的长度是否为0
注意isEmpty判断的是字符串的长度,如果字符串是null,此时代表空引用,编译器会报错
String s1 = ""; System.out.println(s1.length());// 输出0 String s2 = null; System.out.println(s2.length());// 报错
3.被" "引起来的就是字符串,可直接调用方法
System.out.println("hello".length());// 输出5
3.String类对象的比较
1.==判断是否是同一引用(地址相同)
==
左右两边都是基本数据类型,比较的是值的大小,根据值是否相等返回false/true
左右两边都是引用数据类型,比较的是引用对象的地址是否相同,也就是是否是同一引用
// String类是一种引用类型,存储的是对象的地址 // s1和s2引用的是不同对象 s1和s3引用的是同一对象 String s1 = new String("hello"); String s2 = new String("world"); String s3 = s1; System.out.println(s1 == s2);// false System.out.println(s2 == s3);// false System.out.println(s1 == s3);// true
来看一种特殊情况:
当我们直接引用字符串”hello“ 时,str1和str2却相等了?这是为什么?引用类型比较的不是地址吗?是的,比较的是地址。但对于"hello"这样的字符串来说,他是存储在堆区之中的”常量池“上,地址是固定的。也就是说,当第一次使用hello给str1赋值后,常量区上就已经存放了hello这个字符串,再次赋值是会先从常量池中的"hello"获取,获取的和str1是一样的"hello"(地址和值都是一样的)
2.equals 方法
==只能用来比较两个引用对象的地址是否相同,而大多数情况下我们是通过引用类型的内容来判断是否相等的,对于String类来说也是这样的,我们要比较的是字符串的具体内容,而String类中有一个自带的比较内容的方法-->equals(本质还是继承于Object类的
)
String str1 = "hello"; String str2 = "hello"; String str3 = "world"; System.out.println(str1.equals(str2));// true System.out.println(str1.equals(str3));// false
总结:
equals方法用来判断两个字符串的内容是否相同
3.compareTo以及他的接口
再来看String类的定义:
可以看见String类实现了Comparable接口,所以就要重写接口中的compareTo方法
比较思路:
如果两个字符串的长度不一样,先比较长度相同的部分,如果长度相同部分完全相同,则直接返回长度的差值(共同长度是最短字符串的长度)
代码示例:
String str1 = "hello"; String str2 = "hello"; String str3 = "world"; String str4 = "helloworld"; System.out.println(str3.compareTo(str1));// 15 System.out.println(str1.compareTo(str2));// 0 System.out.println(str4.compareTo(str1));// 输出5 System.out.println("===================="); String str5 = "abc"; String str6 = "acc"; System.out.println(str5.compareTo(str6));// 输出-1
compareToIgnoreCase方法
在一些情况下,我们认为大写和小写只是形式上的不同,内容却是相同的,比如"hello"=="HELLO",在不考虑大小写的情况下进行比较,就可以利用方法
compareToIgnoreCase
String str1 = "hello"; String str2 = "HELLO"; String str3 = "HEllo"; System.out.println(str1.compareToIgnoreCase(str2));// 0 System.out.println(str1.compareToIgnoreCase(str3));// 0
总结:
1.compareTo方法返回的Int类型的数据,本质上是对应字符串在字典上的顺序(字典中,前面的字母是小的,后面的字母大,小写比所有大写大)2.忽略大小写带来的形式上的不同,我们可以利用compareToIgnoreCase方法
3.自定义类型一定要重写equals方法和hashcode方法,因为你的逻辑是根据自定义类型的内容进行比较的
4. 字符串查找
字符串查找也是字符串中非常常见的用法,String类中也提供了很多字符串查找的方法
1.charAt方法--》返回对应索引上的字符
String str1 = "abcdef"; System.out.println(str1.charAt(0));// 输出a System.out.println(str1.charAt(1));// 输出b System.out.println(str1.charAt(2));// 输出c System.out.println(str1.charAt(-1));// 异常 System.out.println(str1.charAt(100));// 异常
JavaSE学习值之--String类(二)+https://developer.aliyun.com/article/1413506