目录
前言:
String类:
常见的认识误区:
创建String类:
注意点:
总结:
前言:
String类是Java中最常见的一个类,本篇将对Stirng类的各种功能进行详细的介绍,各位小伙伴如果感兴趣可以点击进来观看。
String类:
Java中的String类是一个非常常用的类,它表示一串字符序列。Java的字符串是不可变的,也就是说一旦创建了一个字符串对象,它的值就不能被修改。这种不可变性使得Java字符串非常安全和效率高。
String类被定义在java.lang包下,属于是Java的核心类,因此在使用的时候不需要进行导包操作。
常见的认识误区:
1.字符串拼接不是我们理解的把后面的字符串连接到前面的字符串上!
package com.itheima.demo1;
public class test07 {
public static void main(String[] args) {
String s1="123";
String s2="456";
System.out.println(s1+s2);
}
}
输出结果:
需要明确的是我们并不是把s2连接到s1后面,而是产生了一个新的字符串,这个字符串存储着s1的字符串与s2字符串连接的结果。也就是说s1与s2进行连接操作时,会产生一个新的字符串s3来存储新的字符串。
2.我们的赋值操作不是对字符串进行更改!
package com.itheima.demo1;
public class test07 {
public static void main(String[] args) {
String s1="123";
s1="456";
System.out.println(s1);
}
}
运行结果:
我们不是对原来的字符串进行更改,而是重新找到一块空间存储字符,并把这个新空间赋值给s1。
简单的可以概括为不是覆盖而是新建!而在给name进行赋值的时候,也会一共存在两个字符串 “1 2 3”和“4 5 6”。
创建String类:
1.直接赋值:
String name ="123";
2.利用new关键字进行赋值操作:
String str = new String("123");
需要注意的是,无论使用哪种方式创建
String
对象,都会在内存中分配新的堆空间,创建新的对象。而使用直接赋值创建字符串对象时,Java虚拟机会对同一常量池中的字面值进行重用,因此当多个String
对象包含相同的字面值时,它们会指向同一个对象实例,从而节省了内存。
例如我们分别利用直接赋值和new关键字创建多个相同的值:
String name1 =“123”;
String name2 =“123”;
String str1 = new String ("123");
String str2 = new String ("123");
内存图解:
JAVA为字符串提供的常见方法:
1.字符串的比较:
字符串的比较(是否相等)需要建立在数据类型相同的情况下,即要么是基本数据类型,要么是引用数据类型。
因为不同的数据类型比较方式不同:
举例:
public class test07 {
public static void main(String[] args) {
String s1="123";
String s2= new String("123");
System.out.println(s1==s2);
}
}
实例:
我们发现即使S1与S2字符串值一样,但是因为数据类型不同,也无法得到我们想要的答案。
因为不同数据类型的字符串无法进行比较,但是在实际应用中,我们又无法始终保证字符串的数据类型始终一致,这给我们带来了巨大的困难,因此JAVA为我们提供了两个函数:
- boolean equals( )完全一样才会是true,否则就是false。
- boolean equalslgnoreCase( ) 是忽略大小写的比较。
代码:
public class test07 {
public static void main(String[] args) {
String s1="123";
String s2= new String("123");
String s3="abc";
String s4= new String("ABC");
System.out.println(s1+"与"+s2+"的比较结果为:"+ s1.equals(s2));
System.out.println(s3+"与"+s4+"的比较结果为:"+ s3.equalsIgnoreCase(s4));
}
}
运行结果:
注意点:
我们录入的字母即使与我们直接赋值的字符串结果一致,那也不相等,无法利用==号进行判断。
import java.util.Scanner;
public class test08 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字");
String s1=sc.next();
String s2="abc";
System.out.println(s1==s2);
}
}
运行结果:
这个问题,我们要到java的源码中去寻找答案,我们点击查看next的源码:
这里的底层跳的很深,不断地在深挖函数,因此不建议大家一个人摸索阅读:
在我们连跳七八次之后,就可以看到我们想要的:
我们可以发现:原来录入键盘数据是用到了 new 关键字,也就是说这个是引用数据类型,那自然无法和我们直接赋值得到的“abc”进行正常比较了。
总结:
以后如果想对字符串进行比较,那么就不可以直接使用“==”,而是要用JAVA提供给我们的函数。这样才可以得到我们需要的答案。
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!