Java 字符串的输入和创建字符串类别与内存存储方式的区别与字符串的比较

今天我们来学习一下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方面的知识~希望你能喜欢

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值