今天我们来学习一下Java中字符串方面的知识~
1.字符串输入的类别与区别
方法
字符串的输入方法一就是通过next()进行输入,但是这种输入,和同类的nextInt();,nextDouble();等一样,就是遇到空格和制表符和回车就会停止接收了。
第二种办法就是nextLine();,这个就可以接收到空格,制表符和回车。
两者的区别可以近似于C语言中的gets()和scanf
注意事项
就是如果next()和nextLine();连用的话且next()放在nextLine()的前面很可能会出现问题
public class StringDemo1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s1=sc.next();
String s2=sc.nextLine();
System.out.println(s1);
System.out.println(s2);
}
}
例如代码如上图,此时我输入一个123 123,则我们看结果如果:>
可以看到,我只输入了123 123,并没有第二次输入,因为s1只能读取空格之前的数据,而空格周之后的数据包括空格就会被s2吸收,导致问题的出现。
二.创建字符串的类别与区别
第一种字符串用=直接赋值
String s1="最喜欢玩原神了";
第二种用new去构造一个字符串
String s2 = new String();
此时s2里什么都没有,不信看下图
String s2 = new String();
System.out.println("右边是s2>"+s2+"<左边是s2");
此时运行结果是
什么都没有。
当然,也可以在new的同时在括号里面写入你想写入的东西
String s2 = new String("现在我有东西了");
System.out.println("右边是s2>"+s2+"<左边是s2");
此时的结果是
第三种是传递一个字符数组,根据字符数组里的内容来出创建一个字符串
char[] arr = {'a', 'b', 'c', 'd'};
java.lang.String s4 = new String(arr);
System.out.println(s4);
此时的结果是
第四种是通过传递byte字符数组,根据数组的内容来创建一个新的字符串
如下图
byte[] arr1 = {97, 98, 99, 100};
java.lang.String s5 = new String(arr1);
System.out.println(s5);
此时的结果是
三.不同创建类型在存储方面的区别
如果是如第一种直接用=赋值的话,就是它会检查字符串池,如果字符串池里有已经赋值的值就会进行复用,如果没有的话就会自己创建并返回字符串池中字符的地址。
如果是用如第二三四种用new进行赋值的话,不论在字符池中有没有重复的,都会重新开辟一片空间。
第一种可能会出现创建两个字符串变量可以是同一个地址
用new创建的字符串变量的地址一定是不同的。之后字符串的比较也会涉及到这方面的知识。
四.字符串的比较
首先我们要了解==号比的是什么,在基本数据类型==号比的就是数据,但如果是引用数据类型,就比如字符串,它比较的却是地址值
简单来说,==号比较的就是变量里面的值
所以,这里我们就要用到上面学到的知识,如果是用第一种=直接构建字符串,就会可能使字符串的地址一样,==的结果就是true
String s1="abc";
String s2="abc";
System.out.println(s1==s2);
结果如下图
但如果是new开辟空间来创建字符串,代码如下
String s1=new String("abc");
String s2=new String("abc");
String s3="abc";
System.out.println(s1==s2);
System.out.println(s1==s3);
代码结果如下
因为new开辟一个新的地址,所以s1 s2 s3的地址值都不一样
所以,我们比较字符串用的应该是boolean equals和boolean equalsIgnoreCase ,前者要考虑大小
写,后者不考虑大小写。
String s1=new String("abc");
String s2=new String("abc");
boolean flag=s1.equals(s2);
System.out.println(flag);
结果就是true
如果这时候我们让s2中的a变成A,用equalsIgnoreCase去判断
String s1=new String("abc");
String s2=new String("Abc");
boolean flag=s1.equalsIgnoreCase(s2);
System.out.println(flag);
结果也是true~
这时候有人要问了,那如果是键盘输入的怎么和自己自定义的字符串进行比较呢
先看代码
Scanner sc=new Scanner(System.in);
//输入一个字符串
String s1=sc.next();
String s2="abc";
//与原本存在的字符串进行比较
System.out.println(s1==s2);
此时我输入一个abc,结果却为false,其实跟你们猜的一样,键盘输入的字符串是重新new了一片空间出来滴!
所以,如果之后要进行字符串比较,还是用String里面自带的方法就行喽
五.谢后
感谢观看到这里~,之后我也会带来更多关于Java方面的知识~希望你能喜欢