String类的相关用法

来源:互联网 发布:淘宝买手机售后保修 编辑:程序博客网 时间:2024/05/22 14:23

==符号的使用

        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));    }}

字符串的内存分配模拟图