Java系列文章目录
Write once,Runanywhere.🔥🔥🔥
💥 💥 💥如果你觉得我的文章有帮助到你,还请【关注➕点赞➕收藏】,得到你们支持就是我最大的动力!!!
💥 💥 💥
⚡版权声明:本文由【马上回来了】原创、在CSDN首发、需要转载请联系博主。
版权声明:本文为CSDN博主「马上回来了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
🚀🚀🚀 新的知识开始喽🚀🚀🚀
文章目录
1.String构造
2.1常用的三种构造方式:
public static void main(String[] args) {
//使用常量串构造
String s1= "123";
System.out.println(s1);
//直接new对象构造
String s2 = new String("456");
System.out.println(s2);
//通过字符数组进行构造
char[] chars = new char[]{'7','8','9'};
String s3 = new String(chars);
System.out.println(s3);
}
2.2String储存
String是引用类型,String引用存储的并不是字符串本身,在String的源代码里我们可以看到value和hash两变量:
String类型与char类型数组存储区别:
public static void main(String[] args) {
//s0、s1和s2都分别new了一个对象,所以这三个引用引用的不是同一个对象,尽管s0和s1对象的内容相同
//s3和s0是同一个对象的引用
String s0 = new String("123");
String s1 = new String("123");
String s2 = new String("234");
String s3 = s0;
System.out.println(s0.length());//获取字符串的长度:3
System.out.println("123".length());//在java中,""引起来的也是String类型对象,获取字符串的长度:3
char[] chars = new char[]{'7','8','9'};
System.out.println(chars.length);//对于获取数组字符串的长度length没有括号,在力扣刷题时要注意。
System.out.println(s0.isEmpty());//如果字符串的长度为0,返回true,否则返回false
}
2.String对象比较
字符串比较是常见操作之一,比如:字符排序。Java中总共提供了5种方式:
2.1 ==比价是否引用同一个对象
注意:对于内置类型的值,==
比较的是变量中的两个值是否相等,对于引用类型==
比较的是引用中的地址。
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 10;
System.out.println(a==b);//false
System.out.println(a==c);//true
String s1 = new String("hello");
String s2 = new String("world");
String s3 = s1;
System.out.println(s1==s2);//false
System.out.println(s1==s3);//true
}
2.2 equals方法比较和eanequalsIgnoreCase方法
public boolean equals(Object anObject) 方法按照字典序比较。字典序:字符大小的顺序。
String类重写了父类中的equals方法,Object中equals默认按照==比较,String重写equals方法后,按照如下规则进行比较:
public boolean equals(Object anObject) {
//1.先检测this和Object是否为同一个对象比较,如果是返回true
if (this == anObject) {
return true;
}
//2.检查anObject是否为String类型的对象,如果是则继续比较,否则返回false
if (anObject instanceof String) {
//将anObject向下转型为String类型对象
String anotherString = (String)anObject;
int n = value.length;
//3.this和anObject两个字符串的长度是否相同,是继续比较,否则返回false
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
//4.按照字典序,从前往后逐个字符进行比较
while (n-- != 0) {
//若遇到字符不相同,比较结束
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
public static void main(String[] args) {
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = new String("world");
System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s3));//false
}
public boolean equalsIgnoreCase(String anotherString)方法和equals比较的方法一样只不过是忽略了大小写来进行比较的:
public static void main(String[] args) {
String s1 = "hello";
String s2 = "HELLO";
System.out.println(s1.equalsIgnoreCase(s2));//true
}
2.3 int compareTo(String s)方法比较
与equals不同,equals返回的是boolean类型,而compareTo返回的是int类型。具体比较方式:
1.先按照字符串顺序从前往后比较,如果出现不等的字符,直接返回两个字符大小的差值
2.如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串的长度差值
public int compareTo(String anotherString) {
//获取字符串长度
int len1 = value.length;
int len2 = anotherString.value.length;
//获取两个字符串长度值较小的那一个
int lim = Math.min(len1, len2);
//获取两个字符串的value值
char v1[] = value;
char v2[] = anotherString.value;
//进行比较 从第k的字符开始
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
//1.如果相等返回这两个字符的差值
if (c1 != c2) {
return c1 - c2;
}
k++;
}
//2.返回连个字符串的长度差值
return len1 - len2;
}
public static void main(String[] args) {
String s1 = "abcde";
String s2 = "abcd";
String s3 = "acbde";
System.out.println(s1.compareTo(s2));//前k个字符都相同 s1.length()-s2.length() = 5-4==1
System.out.println(s1.compareTo(s3));//'b'-'c' == 1
}
int compareToIgnoreCase(String str) 方法和compareTo方法也一样,只不过是忽略了大小写进行比较:
public static void main(String[] args) {
String s1 = "abcd";
String s2 = "ABCd";
String s3 = "ACbd";
System.out.println(s1.compareToIgnoreCase(s2));//s1.length()-s2.length() = 5-4==1
System.out.println(s1.compareToIgnoreCase(s3));//'b'-'c' == 1
}
🌏🌏🌏今天的你看懂这里又学到了很多东西吧🌏🌏🌏
🌔 🌔 🌔下次见喽🌔 🌔 🌔