零基础自学javase黑马课程第二十天

77 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第34天,点击查看活动详情

零基础自学javase黑马课程第二十天

✨欢迎关注🖱点赞🎀收藏⭐留言✒

🔮本文由京与旧铺原创,csdn首发!

😘系列专栏:java学习

💻首发时间:🎞2022年12月22日🎠

🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦

🎧作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲

🐱‍💻导航小助手

零基础自学javase黑马课程第二十天🐱‍💻导航小助手🎍练习-拼接字符串🥽StringJoiner🎑字符串相关类的底层原理

🎍练习-拼接字符串

需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回

调用该方法,并在控制台输出结果

例如:数组为int[ ] arr={1,2,3};

执行方法后的输出结果为:[1,2,3]

package com.itheima.test8;
​
public class StringBuilder3 {
    public static void main(String[] args) {
        int[] arr={1,2,3};
        String str=arrToString(arr);
        System.out.println(str);
    }
    public static String arrToString(int[] arr){
        StringBuilder sb=new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            if(i==arr.length-1){
                sb.append(arr[i]);
            }else{
                sb.append(arr[i]).append(", ");
            }
        }
        sb.append("]");
        return sb.toString();
    }
}
​

🥽StringJoiner

StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的

作用:提高字符串的操作效率,而且代码编写非常简洁,但是目前市场上很少有人用

jdk8出现的

构造方法

public StringJoiner(间隔符号)    创建对象,制定拼接时的间隔符号
public StringJoiner(间隔符号,开始符号,结束符号)    创建对象,制定拼接时的间隔符号,开始符号,结束符号

成员方法

public StringJoiner add(添加的内容)        添加数据,并返回对象本身
public int length()                       返回长度(字符出现的个数)
public String toString()                  返回一个字符串(该字符串就是拼接之后的结果)
package com.itheima.test8;
​
import java.util.StringJoiner;
​
public class StringJoiner1 {
    public static void main(String[] args) {
        StringJoiner sj=new StringJoiner(",","[","]");
        sj.add("aaa").add("bbb").add("ccc");
        int len=sj.length();
        System.out.println(len);//13
        System.out.println(sj);//[aaa,bbb,ccc]
        String str=sj.toString();
        System.out.println(str);//[aaa,bbb,ccc]
    }
​
}
​

🎑字符串相关类的底层原理

原理1:字符串存储的内层原理

直接赋值会复用字符串常量池中的

new出来不会复用,而是开辟一个新的空间

原理2:==号比较的到底是什么

基本数据类型比较数据值

引用数据类型比较地址值

原理3:字符串拼接的底层原理

拼接的时候没有变量,都是字符串,触发字符串的优化机制,在编译的时候就已经是最终的结果

在拼接的时候有变量,jdk8以前底层会使用StringBuilder

原理4:StringBuilder源码分析

默认创建一个长度为16的字节数组

添加的内容长度小于16,直接存

大于16会扩容,原本的容量*2+2

扩容后还不够,以实际长度为准