String类的相关用法

==符号的使用

        String t1 = "qwertyui";

        String t2 = new String("zxcvbn");

        String t3 = new String("zxcvbn");

        System.out.println(t1);
        System.out.println(t2);
        System.out.println(t3);

        if (t2 == t3) {  

            // 引用类型  == 比较的是保存的地址
            // 基本类型  == 比较的是值
            // 都是比较栈上保存的内容 

            System.out.println("t2相等t3");
        }

String对象的内存分配

public static void main(String[] args) {

        String t1 = "ABCDEFG";
        // 字符串是一种特殊的数据类型,它的值不在栈和堆上
        // 存储在方法区的字符串常量池里

        // 1.去字符串常量池中查找是否有常量ABCDEFG 
        //      如果有,直接把地址赋值给变量保存
        //      如果没有,先创建常量,再赋值给变量保存

        String t4 = "ABCDEFG";

        if (t1 == t4) {

            System.out.println(t1 == t4);
        }

        String t2 = new String("ABCDEFG");
        // 1.堆上开辟内存 0x001
        // 2.0x001中分配出一块区域保存0x003
        // 

        String t3 = new String("ABCDEFG");
        // 1.堆上开辟内存 0x002
        // 2.0x002中分配出一块区域保存0x003

        // 字符串比较禁止使用 == 必须使用equals方法\
        // == 比较的是地址 equals比较的是值
        // 字符串一般是比较内容  所以用equals

        if (t2 != t3) {
            System.out.println("t2 和t3的地址不相等");
        }

        if (t2.equals(t3)) {
            System.out.println("t2和t3的值相等");
        }

        // 会创建几个对象?2个
        // 1.常量池开辟空间保存123456
        // 2.堆上开辟空间指向常量池中的123456
        String text = new String("123456");

    }

String对象的连接

        String t1 = "123456";

        // 使用引用类型  变量  用的是保存的地址  找到数据 
        String t2 = new String(t1);// new String("123456");

        System.out.println(t2);

        System.out.println(t1==t2);
public static void main(String[] args) {

        String t1 = "ab";
        String t2 = "cd";
        String t3 = "abcd";

        String t4 = "ab" + "cd"; // 编译时会优化成为abcd

        // 每次使用+号连接字符串时都创建了一个新的对象
        String t5 = t1 + t2;// = new string("abcd"); 分配到堆上


        System.out.println("t3 == t4:" + (t3 == t4));

        System.out.println("t3 == t5:" + (t3 == t5));

        String t6 = t1 + t2 + t3 + t4;// 会产生3个对象  

        // StringBuffer
        // StringBuilder
        StringBuilder s1 = new StringBuilder();
        // 追加一个字符串
        s1.append(t1);
        s1.append(t2);
        s1.append(t3);
        s1.append(t4); // 追加新内容

        String s7 = s1.toString(); // 把StringBuilder 转换为String

        StringBuffer s2 = new StringBuffer();
        // 追加一个字符串
        s2.append(t1); // 追加新内容
        s2.append(t2);
        s2.append(t3);
        s2.append(t4);

        String t8 = s2.toString(); // 把StringBuffer 转换为String

        System.out.println(s7 + t8);

    }

String相关方法的使用

import java.util.Arrays;

public class StringTest4 {

    public static void main(String[] args) {

        String t1 = "abcd你好";

        // 长度 = 字符个数
        System.out.println("获取字符串的长度:" + t1.length());

        // 大小写不一致也是不同的
        System.out.println("比较两个字符串是否相同:" + t1.equals("abcd"));

        // 忽略大小写
        System.out.println("比较两个字符串是否相同(忽略大小写):" + t1.equalsIgnoreCase("abcd你好"));

        // 如果是拿字符串和对象比较,通常会使用字符串去掉用equals方法
        String password = "123456";

        // 推荐字符串在前,对象在后 防止出现password = null 的情况 导致程序崩溃
        boolean f1 = "123456".equals(password);

        // null对象调用任何属性和方法都会产生NullPointerException
        // password = null
        // boolean f2 = password.equals("123456"); // 程序崩溃

        System.out.println("是否以XXX开始:" + t1.startsWith("abcd"));
        System.out.println("是否以XXX结束:" + t1.endsWith("你好"));


        System.out.println("是否包含字符串abc:" + t1.contains("abc"));

        String t2 = t1.concat("1234"); // + 123
        System.out.println(t2);

        // 从第几个字符串开始剪切  下标从0开始
        String t3 = t1.substring(2);
        System.out.println(t3);

        // 包含起点  不包含终点
        String t4 = t1.substring(1, 3);
        System.out.println(t4);

        // 替换指定的字符
        String t5 = t1.replace('a', 'F');
        System.out.println(t5);

        // 去掉前后的  不去掉中间的
        String t6 = "   杀死对方   sadf  sdfasd发第三方    ".trim();
        System.out.println(t6);

        // 去除全部的空格
        String t7 = "   asdf的    刚发的   入骨髓的   ".replaceAll(" ", "");
        System.out.println(t7);

        // 获取指定位置的字符
        char c = t1.charAt(2);
        System.out.println(c);

        // 获得字符串的char数组
        char[] cs = t1.toCharArray();
        System.out.println(Arrays.toString(cs));

        // 某个字符串的索引  ---- 第一个字符在元字符串的索引(如果包含)
        // 包含多个  返回第一次出现的第一个字符的索引
        int i = t1.indexOf("bc");
        // 不包含返回-1
        int j = t1.indexOf("000"); 

        // 最后一次出现该字符串的首字符的索引  
        // 不包含返回-1
        t1.lastIndexOf("nm");

        // 切换大写
        String t8 = t1.toUpperCase();
        // 切换小写
        String t9 = t8.toLowerCase();
        System.out.println(t8);
        System.out.println(t9);

        // 将char[] 转换为字符串
        char[] cs2 = {'c','f','r','g','1','2','6'};
        String t10 = new String(cs2);
        System.out.println(t10);

        // 从索引为2开始连着的3个字符拼接为字符串
        String t11 = new String(cs2, 2, 3);
        System.out.println(t11);

        // 按照特殊标记分割字符 得到字符串数组
        String t12 = "1,2,3,4,5,6";
        String[] s3 = t12.split(",");
        System.out.println(Arrays.toString(s3));

    }
}

字符串的内存分配模拟图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值