JAVASE语法零基础——String类1

Java系列文章目录


在这里插入图片描述

Write once,Runanywhere.🔥🔥🔥

💥 💥 💥如果你觉得我的文章有帮助到你,还请【关注➕点赞➕收藏】,得到你们支持就是我最大的动力!!!
💥 💥 💥

版权声明:本文由【马上回来了】原创、在CSDN首发、需要转载请联系博主。
版权声明:本文为CSDN博主「马上回来了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

在这里插入图片描述

🚀🚀🚀 新的知识开始喽🚀🚀🚀
在这里插入图片描述


1.String构造

2.1常用的三种构造方式:

 public static void main(String[] args) {
        //使用常量串构造
        String s1= "123";
        System.out.println(s1);
        
        //直接new对象构造
        String s2 = new String("456");
        System.out.println(s2);
        
        //通过字符数组进行构造
        char[] chars = new char[]{'7','8','9'};
        String s3 = new String(chars);
        System.out.println(s3);
    }

2.2String储存

String是引用类型,String引用存储的并不是字符串本身,在String的源代码里我们可以看到value和hash两变量:
在这里插入图片描述

在这里插入图片描述
String类型与char类型数组存储区别:
在这里插入图片描述

 public static void main(String[] args) {
        //s0、s1和s2都分别new了一个对象,所以这三个引用引用的不是同一个对象,尽管s0和s1对象的内容相同
        //s3和s0是同一个对象的引用
        String s0 = new String("123");
        String s1 = new String("123");
        String s2 = new String("234");
        String s3 = s0;
        System.out.println(s0.length());//获取字符串的长度:3
         System.out.println("123".length());//在java中,""引起来的也是String类型对象,获取字符串的长度:3
        char[] chars = new char[]{'7','8','9'};
        System.out.println(chars.length);//对于获取数组字符串的长度length没有括号,在力扣刷题时要注意。
        System.out.println(s0.isEmpty());//如果字符串的长度为0,返回true,否则返回false
    }

在这里插入图片描述

2.String对象比较

字符串比较是常见操作之一,比如:字符排序。Java中总共提供了5种方式:

2.1 ==比价是否引用同一个对象

注意:对于内置类型的值,==比较的是变量中的两个值是否相等,对于引用类型==比较的是引用中的地址。

public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 10;
        System.out.println(a==b);//false
        System.out.println(a==c);//true
        String s1 = new String("hello");
        String s2 = new String("world");
        String s3 = s1;
        System.out.println(s1==s2);//false
        System.out.println(s1==s3);//true
    }

2.2 equals方法比较和eanequalsIgnoreCase方法

public boolean equals(Object anObject) 方法按照字典序比较。字典序:字符大小的顺序。
String类重写了父类中的equals方法,Object中equals默认按照==比较,String重写equals方法后,按照如下规则进行比较:

public boolean equals(Object anObject) {
//1.先检测this和Object是否为同一个对象比较,如果是返回true
        if (this == anObject) {
            return true;
        }
//2.检查anObject是否为String类型的对象,如果是则继续比较,否则返回false
        if (anObject instanceof String) {
        //将anObject向下转型为String类型对象
            String anotherString = (String)anObject;
            int n = value.length;
            //3.this和anObject两个字符串的长度是否相同,是继续比较,否则返回false
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                //4.按照字典序,从前往后逐个字符进行比较
                while (n-- != 0) {
                //若遇到字符不相同,比较结束
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
 public static void main(String[] args) {
        String s1 = new String("hello");
        String s2 = new String("hello");
        String s3 = new String("world");
        System.out.println(s1.equals(s2));//true
        System.out.println(s1.equals(s3));//false
    }

public boolean equalsIgnoreCase(String anotherString)方法和equals比较的方法一样只不过是忽略了大小写来进行比较的:

public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "HELLO";
        System.out.println(s1.equalsIgnoreCase(s2));//true
    }

2.3 int compareTo(String s)方法比较

与equals不同,equals返回的是boolean类型,而compareTo返回的是int类型。具体比较方式:
1.先按照字符串顺序从前往后比较,如果出现不等的字符,直接返回两个字符大小的差值
2.如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串的长度差值

public int compareTo(String anotherString) {
		//获取字符串长度
        int len1 = value.length;
        int len2 = anotherString.value.length;
       	//获取两个字符串长度值较小的那一个
        int lim = Math.min(len1, len2);
        //获取两个字符串的value值
        char v1[] = value;
        char v2[] = anotherString.value;
		//进行比较 从第k的字符开始
        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            //1.如果相等返回这两个字符的差值
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        //2.返回连个字符串的长度差值
        return len1 - len2;
    }
 public static void main(String[] args) {
        String s1 = "abcde";
        String s2 = "abcd";
        String s3 = "acbde";
        System.out.println(s1.compareTo(s2));//前k个字符都相同 s1.length()-s2.length() = 5-4==1
        System.out.println(s1.compareTo(s3));//'b'-'c' == 1
    }

int compareToIgnoreCase(String str) 方法和compareTo方法也一样,只不过是忽略了大小写进行比较:

 public static void main(String[] args) {
        String s1 = "abcd";
        String s2 = "ABCd";
        String s3 = "ACbd";
        System.out.println(s1.compareToIgnoreCase(s2));//s1.length()-s2.length() = 5-4==1
        System.out.println(s1.compareToIgnoreCase(s3));//'b'-'c' == 1
    }


🌏🌏🌏今天的你看懂这里又学到了很多东西吧🌏🌏🌏

在这里插入图片描述

🌔 🌔 🌔下次见喽🌔 🌔 🌔
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马上回来了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值