java 字符串

目录

一、创建字符串

二、字符串的==号比较

三、字符串内容比较

四、使用scanner输入,值保存在堆内存中,与使用构造方法new出来相同

五、字符串的常见操作

六、String和char以及int的相互转换

七、字符串的高效拼接

八、 字符串拼接更简洁的方式

九、java字符串判断是否重复(去重)​​​​​​​

一、创建字符串

1.直接赋值 2.通过构造方法创建

内存模型:

1. 第一种方法

2.第二种方法

因此,第一种方法较为节约内存。

code: 

String std = "abc";
char[] ch = { 'a', 'b', 'c' };
String std1 = new String(ch);
ch[0] = 'Q';
String std2 = new String(ch);
byte[] bt = { 97, 98, 99, 100 };
String std3 = new String(bt);
System.out.println(std);
System.out.println(std1);
System.out.println(std2);
System.out.println(std3);

output:

abc
abc
Qbc
abcd

二、字符串的==号比较

基本数据类型比较的是数据值,而引用数据类型比较的是地址值。String是引用类型,故字符串中==号比较的是地址。

String a = "abc";
String b = "abc";
System.out.println(a == b);//true

因此,直接赋值时,a、b指向堆内存中串池中存放的“abc”,故a、b中存放的是串池中"abc"的地址,在串池中,相同的数值不会重复创建,而是采用引用的方式赋值,故a、b存放的地址相同,地址对比返回true。

而对于使用构造方法创建的字符串,如

String c = new String("abc");
System.out.println(a == c);//false

使用构造方法创建的字符串在堆区而不在串池中,故两者的地址不同,比较结果为false。

三、字符串内容比较

System.out.println(a.equals(c)); //true

四、使用scanner输入,值保存在堆内存中,与使用构造方法new出来相同

 因为scanner的底层代码是使用new构造方法创建的字符串。

五、字符串的常见操作

 注:不影响原字符串。

六、String和char以及int的相互转换

code:

        String std = "1234567";
        char figure = std.charAt(1);
        String newFigure = String.valueOf(figure);
        int fig = Integer.valueOf(figure);
        int fig1 = Integer.valueOf(newFigure);
        System.out.println(newFigure);
        System.out.println(fig);
        System.out.println(fig1);

output:

2
50
2

七、字符串的高效拼接

StringBuilder可以看作一个容器,可用来创建可变字符串对象。常用于字符串的拼接与反转。

code:

        StringBuilder std = new StringBuilder();
        System.out.println(std);// 打印为空,而不是地址,因为StringBuilder类在封装时进行了特殊处理
        StringBuilder std1 = new StringBuilder("abc");
        std1.append("123");
        std1.append("ch001!@#!@%#$@@");
        String type1 = std1.getClass().toString();
        String std2 = std1.toString();//从StringBuilder类型变为String类型
        String type2 = std2.getClass().toString();
        System.out.println(type1);
        System.out.println(type2);
        System.out.println(std1);

output:

class java.lang.StringBuilder
class java.lang.String
abc123ch001!@#!@%#$@@

 java8以前,字符串使用“+”进行,拼接时,在底层使用StringBuilder完成,之后再使用toString方法转换回Stirng,又由于toString方法在底层使用new String生成,故使用"+"拼接字符串至少会在堆内存中生存两个对象。

 java8以后,字符串使用“+”拼接时,会首先预估各个字符的长度,开辟一个字符数组,最后生成一个新的字符串,优化了拼接速度。

 

 

 

八、 字符串拼接更简洁的方式

可以使用StirngJoiner,可以人为指定所需拼接的间隔符号、起始符号、终止符号。

 code:

    public static String pinjie(int[] arr) {
       StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length - 1) {
                sb.append(arr[i]).append(",");
            } else {
                sb.append(arr[i]);
            }
        }
        String sb1 = sb.append("]").toString();
        return sb1;
}
   public static void main(String[] args) {
        int[] arr1 =  { 1, 2, 3, 4, 5 };
        System.out.println(pinjie(arr1));
        pinjie1(arr1);
}

output:

[1, 2, 3, 4, 5]

九、java字符串判断是否重复(去重)

    public static boolean judge(String t) {
        List<String> s = new ArrayList<>();
        for (int i = 0; i < t.length(); i++) {
            s.add(String.valueOf(t.charAt(i)));
        }
        List<String> s1 = s.stream().distinct().collect(Collectors.toList());
        if (s.size() != s1.size()) {
            return false;
        } else {
            return true;
        }
    }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值