zoukankan      html  css  js  c++  java
  • java

    1.String类在java.lang中

    2.实现了3个接口:Serializable,CharSequence,Comparable

    3.创建:

    String s = "aaa";

    String s = new String();

    String s = new String("aaa");

    String s = newString(byte[] b);   -----> 数字换成char然后拼起来

    String s = newString(char[] b); 

    4.String的不可变特性:

    长度和内容不可变,引用数组不可变。

    package stringtest;
    
    public class StringTest {
        public static void main(String[] args){
            String s1 = "aaa";
            String a = s1;
            s1 = "bbb";//String每次赋值其实是新new了一个对象,因为本身本质是final char[]所以长度和内容不能改变。
            String b = s1;
            System.out.println(a == b);
    
            TestClass tc1 = new TestClass();
            tc1.s = "aaa";
            TestClass c = tc1;
            tc1.s = "bbb";//一般的引用类变量则是堆内存空间指针,所以内容改变了本身地址并不会变。
            TestClass d = tc1;
            System.out.println(c == d);
    
        }
    }

    5.String类中的常用方法

    package stringtest;
    
    public class StringTest {
        public static void main(String[] args){
            String s1 = "aaa";
            String a = s1;
            s1 = "bbb";//String每次赋值其实是新new了一个对象,因为本身本质是final char[]所以长度和内容不能改变。
            String b = s1;
            System.out.println("a == b" + (a == b));
    
            TestClass tc1 = new TestClass();
            tc1.s = "aaa";
            TestClass c = tc1;
            tc1.s = "bbb";//一般的引用类变量则是堆内存空间指针,所以内容改变了本身地址并不会变。
            TestClass d = tc1;
            System.out.println("c == d" + (c == d));
    
            //常用方法
            //equals
            String s2 = new String("abc");
            String s3 = new String(new char[]{'a','b','c'});
            System.out.println("s2 == s3" + (s2 == s3));
            System.out.println("s2.equals(s3)" + s2.equals(s3)); // 不管地址或者声明方法是否一样,只比较String存储的char[]的值
            //hashcode
    //        public static int hashCode(byte[] value) {
    //            int h = 0;
    //            for (byte v : value) {
    //                h = 31 * h + (v & 0xff);
    //            }
    //            return h;
    //        }
            //把String中每一个字符遍历,每次让h = 31 * h + 字符的字符码
            System.out.println("a".hashCode());
            System.out.println((int)('a'));//把char a强制转换为int可以知道它的字符码
            //a的字符码为97,所以结果为97
            System.out.println("ab".hashCode());
            //a的字符码为97,b的字符码为98,
            // 第一次循环h = 31 * 0 + 97 = 97
            // 第二次循环h = 31 * 97 + 98  = 3105
            System.out.println(31 * 97 + 98);
    
            //compareTo
            //先找寻比较的字符串中较短的那个作为比较循环的次数,然后比较,
            System.out.println("abc".compareTo("abe")); //比较Char1[i] - Char2[i],c - e = -2
            System.out.println("abcde".compareTo("ab")); //如果两个字符串长度不同,但是前半部分一样,则比较长度  5 - 2 = 3
            System.out.println("abde".compareTo("abc"));// d - c = 1
    
            //toString
            TestClass testToString = new TestClass();
            System.out.println(testToString.toString()); //一般引用类的toString = 类名@hashcode
            int i = testToString.hashCode();
            System.out.println(Integer.toHexString(i));//转化为16进制
            //也可以用这个方法,后面参数是进制: System.out.println(Integer.toString(i,16));
    
            String sToString = "a";
            System.out.println(sToString.toString());//String的toString重写过,结果为char[]的值
    
            //charAt
            System.out.println("abc".charAt(2));//返回char[2]的值
    
            //length
            System.out.println("abc".length());//返回char[]长度
            System.out.println(new char[]{'a','b','c'}.length);//注意和char[]的区别,数组的length是属性,String的是方法
    
            //concat
            System.out.println("a".concat("bc"));//拼接“a”和“bc”,返回一个Stirng类型,与+效果相同,性能concat更好。
            // 如果频繁拼接,最好使用StringBuilder(效率高)或者StringBuffer(更安全,适合多线程)
            StringBuffer sb1 = new StringBuffer("a");
            StringBuffer sb2 = new StringBuffer("bc");
            StringBuffer sb3 = sb1;
            sb1 = sb1.append(sb2);//append()用来拼接sb1 和 sb2
            StringBuffer sb4 = sb1;
            System.out.println(sb3 == sb4); //如果是string的话,之前测试过会返回false,因为String不可变性,会让它每次改变时生成新的对象,而StringBuffer则是原基础拼接,所以效率更高。
    
            //toLowerCase
            System.out.println("ABc".toLowerCase());//全部变成小写,常用来做比较
    
            //codePointAt
            System.out.println("ABc".codePointAt(0));//返回char[2]的字符码值,A是65,a是97
    
            //substring
            System.out.println("ABc".substring(1,2));//char[1] - char[2] 的截取
            System.out.println("ABc".substring(1)); //从char[1]截取到最后
    
            //split
            String[] sArr = "aaadbcd//dedfd".split("d"); //以d为分界线,分割string并返回分割后的数组
            System.out.println(sArr.length);
            for(int j = 0 ; j < sArr.length; j++){
                System.out.println("sArr中的第" + j + "个值=" + sArr[j] + "!!!");
            }
    //        5
    //        sArr中的第0个值=aaa!!!
    //        sArr中的第1个值=bc!!!
    //        sArr中的第2个值=//!!!
    //        sArr中的第3个值=e!!!
    //        sArr中的第4个值=f!!!
            //结尾d后面并没有切割出""
    
            sArr = "aaadbcd//dedfd".split("/"); //以d为分界线,分割string并返回分割后的数组
            System.out.println(sArr.length);
            for(int j = 0 ; j < sArr.length; j++){
                System.out.println("sArr中的第" + j + "个值=" + sArr[j] + "!!!");
            }
    //        3
    //        sArr中的第0个值=aaadbcd!!!
    //        sArr中的第1个值=!!!     //中间两个//之间的""被切割了出来
    //        sArr中的第2个值=dedfd!!!
    
            sArr = "aaadbcd\dedfd".split("\\"); //以d为分界线,分割string并返回分割后的数组 两个\表示转义,String中是特殊字符,不能存在。|也是特殊字符,需要用\|来表示
            System.out.println(sArr.length);
            for(int j = 0 ; j < sArr.length; j++){
                System.out.println("sArr中的第" + j + "个值=" + sArr[j] + "!!!");
            }
    //        2
    //        sArr中的第0个值=aaadbcd!!!
    //        sArr中的第1个值=dedfd!!!
    
            sArr = "aaadbcd|dedfd".split("\|"); //以d为分界线,分割string并返回分割后的数组 两个\表示转义,String中是特殊字符,不能存在。|也是特殊字符,需要用\|来表示
            System.out.println(sArr.length);
            for(int j = 0 ; j < sArr.length; j++){
                System.out.println("sArr中的第" + j + "个值=" + sArr[j] + "!!!");
            }
    //        2
    //        sArr中的第0个值=aaadbcd!!!
    //        sArr中的第1个值=dedfd!!!
    
            //replace
            System.out.println("abcba".replace("b","abc"));//replace(old,new)替换
            //aabccabca
    
        }
    }
  • 相关阅读:
    php sendmail 安装配置
    linux 创建git 仓库
    laravel 项目 配置 nginx
    lnmp 搭建后,nginx下php文件404但是html文件正常访问【已解决】
    为什么 ++[[]][+[]]+[+[]] = 10 ?
    JS移动客户端--触屏滑动事件
    前端开发Vue框架--(一)
    Django数据库优化及事务
    Django聚合查询、分组查询、F与Q查询
    django篇--->十(auth模块)
  • 原文地址:https://www.cnblogs.com/clamp7724/p/11624804.html
Copyright © 2011-2022 走看看