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

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

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


🕐1.String类的定义

🕑2.String类的创建

🕒3.字符串的大小比较


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


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是一个引用类型,所以自己不会存字符串,那么存在哪里呢,打开它的源码有惊喜

0a5f325e75a24842ad553e7f9882095a.png


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


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


a729206fc21a459fbd8a2c35c0a7785b.png

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


         

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


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

1 用==

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


public class TestDemo {
    public static void main(String[] args) {
        String s1="hello";
        String s2="hello";
        System.out.println(s1==s2);//true
        System.out.println("======");
        String s3=new String("hello");
        String s4=new String("hello");
        System.out.println(s3==s4);//false
    }
}

ef76ea4b4da5427bbc6816c1bd91e587.png


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


2.用equals方法


public class TestDemo {
    public static void main(String[] args) {
        String s1="hello";
        String s2="hello";
        System.out.println(s1==s2);//true
        System.out.println("======");
        String s3=new String("hello");
        String s4=new String("hello");
        System.out.println(s3==s4);//false
        System.out.println("====");
        System.out.println(s1.equals(s2));//true
        System.out.println(s3.equals(s4));//true
        System.out.println(s1.equals(s3));//true
        System.out.println(s1 == s3);//false
    }
}

7d940465a623424a9467a5ccfe291017.png


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

我们再来看看equals方法

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


3.用compareTo方法进行比较


public class TestDemo {
    public static void main(String[] args) {
        String s1=new String("abandon");
        String s2=new String("abandondefg");
        System.out.println(s1.compareTo(s2));
        System.out.println("======");
        String s3=new String("abcdrfg");
        String s4=new String("abcdefg");
        System.out.println(s3.compareTo(s4));
        System.out.println("=====");
        String s5=new String("abcd");
        String s6=new String("abcd");
        System.out.println(s5.compareTo(s6));
    }


02162332520f45519750b87b61345597.png

先来看看compareTo的源码

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


4.使用compareToIgnorceCase方法进行比较


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

先看看源码


public class TestDemo {
    public static void main(String[] args) {
        String s1=new String("WYB");
        String s2=new String("wyb");
        System.out.println(s1.compareToIgnoreCase(s2));
        String s3=new String("ABCDE");
        String s4=new String("abcdeuuu");
        System.out.println(s3.compareToIgnoreCase(s4));
        String s5=new String("ABcde");
        String s6=new String("Abyde");
        System.out.println(s5.compareToIgnoreCase(s6));
    }

597b3971b11c4d91af62edc3767284b8.png


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


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

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


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

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


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


相关文章
|
6月前
|
存储 C# C语言
字符串终止符
字符串终止符
503 2
|
6月前
|
存储 算法 编译器
|
存储 编译器
C 字符串
C 字符串。
50 0
|
6月前
|
存储 安全 C语言
c++字符串
c++字符串
57 1
|
6月前
|
存储 C语言
c字符串
c字符串
36 0
|
6月前
|
C#
C#字符串
C#字符串
44 0
8 字符串
8 字符串
55 0