• 字符串的简单介绍和字符串的大小比较


    以前就写过一篇关于String的文章,今天再来写一篇,更加深入了解一下String类

    🕐1.String类的定义

    🕑2.String类的创建

    🕒3.字符串的大小比较

    1.之前在C语言中我们已经学到了字符类型,但是C语言没有String类,但是在Java中有String类,今天我们就来说一说String类

    如何定义一个字符串

    可以直接

    String   ret="wyb";

    也可以

    直接new一个,因为String类算一个类,是引用类型,直接通过构造一个对象,产生字符串,就像这样

    String  str=new String("wyb ");

    还可以,这个方法比前两个复杂一点

    通过数组进行构造

    比如

    char  []ret ={w,y,b};

    String str=new String(ret);

    这句话可以理解为是把数组强制类型转换为字符串类型

    String是一个引用类型,所以自己不会存字符串,那么存在哪里呢,打开它的源码有惊喜

    可以看到String类是被final修饰的,那么说明不能被继承,它里面有两个成员变量

    一个是由private修饰的value[]数组,另一个是private修饰的hash,new出来的字符串就放在value数组里面

    就像上图中的例子一样,而hash存的是一个地址,具体在数据结构中我们再说

    在Java中,只要被双引号引起来的变量就是字符串

    下面来说一说字符串的比较

    1 用==

    在基本类型的比较中,==比较的就是内容是否相等,在引用类型中==比较的是所指对象的地址是否相等

    1. public class TestDemo {
    2. public static void main(String[] args) {
    3. String s1="hello";
    4. String s2="hello";
    5. System.out.println(s1==s2);//true
    6. System.out.println("======");
    7. String s3=new String("hello");
    8. String s4=new String("hello");
    9. System.out.println(s3==s4);//false
    10. }
    11. }

    s1和s2就是普通的那样的比较,不是引用类型,所以直接比较内容即可,s3和s4是两个引用,所以需要比较地址

    2.用equals方法

    1. public class TestDemo {
    2. public static void main(String[] args) {
    3. String s1="hello";
    4. String s2="hello";
    5. System.out.println(s1==s2);//true
    6. System.out.println("======");
    7. String s3=new String("hello");
    8. String s4=new String("hello");
    9. System.out.println(s3==s4);//false
    10. System.out.println("====");
    11. System.out.println(s1.equals(s2));//true
    12. System.out.println(s3.equals(s4));//true
    13. System.out.println(s1.equals(s3));//true
    14. System.out.println(s1 == s3);//false
    15. }
    16. }

     

    equals比较的是其中的内容是否相等,最后一个s1和s3采用==比较一定是错误的,因为s1看内容,s2看指向,二者比较的东西都不一样,所以是错误的

    我们再来看看equals方法

    这是具体使用equals时具体实现的源码 ,可以看出笔记比较的是内容是否相同

    3.用compareTo方法进行比较

    1. public class TestDemo {
    2. public static void main(String[] args) {
    3. String s1=new String("abandon");
    4. String s2=new String("abandondefg");
    5. System.out.println(s1.compareTo(s2));
    6. System.out.println("======");
    7. String s3=new String("abcdrfg");
    8. String s4=new String("abcdefg");
    9. System.out.println(s3.compareTo(s4));
    10. System.out.println("=====");
    11. String s5=new String("abcd");
    12. String s6=new String("abcd");
    13. System.out.println(s5.compareTo(s6));
    14. }

    先来看看compareTo的源码

     返回值是int ,具体实现是这样的,根据字典序来实现的,当出现不一样的字母时返回差值,如果两个字母不一样长,但是前面的字母都一样,就是多出来的不一样,那么就返回多出来的几个字母个数,如果字符串相等,返回0;

    4.使用compareToIgnorceCase方法进行比较

    这里就代表忽略大小写,和compareTo方法比较方式一样

    先看看源码

     
    

     

    1. public class TestDemo {
    2. public static void main(String[] args) {
    3. String s1=new String("WYB");
    4. String s2=new String("wyb");
    5. System.out.println(s1.compareToIgnoreCase(s2));
    6. String s3=new String("ABCDE");
    7. String s4=new String("abcdeuuu");
    8. System.out.println(s3.compareToIgnoreCase(s4));
    9. String s5=new String("ABcde");
    10. String s6=new String("Abyde");
    11. System.out.println(s5.compareToIgnoreCase(s6));
    12. }

     

    来总结一下,比较字符串大小的方法

    1.用==,比较的是两个内容是否相同

    2.用 equals方法,比较的是引用所指对象的地址是否相同

    3.用compareTo方法比较的是字母字典顺序,返回差值

    4.用compareToIgnorceCase方法,和compareTo方法一样,就是忽略了大小写

    今天的分享就到这里,我们下期再见啦,886

  • 相关阅读:
    【机器学习】李宏毅——AE自编码器(Auto-encoder)
    损失函数总结(五):PoissonNLLLoss、GaussianNLLLoss
    SQL金融行业项目:你每月消费多少?(累计额,链表,case when)
    el-table实现局部加载(只有body体加载,表头不加载)
    .NET Core Web API 之SignalR
    Redis数据结构三之压缩列表
    练[MRCTF2020]套娃
    ES6(ECMASript 6 新特性---Promise)
    vue-electron 项目创建记录及注意事项
    戏说领域驱动设计(十八)——内验
  • 原文地址:https://blog.csdn.net/weixin_61436104/article/details/127988948