• String


    String不可变:在内存(堆)中创建了一个字符串之后,它不能被改变,对字符串的操作方法都是新创建了一个字符串,原字符串不变

    需要可变字符串,一般使用StringBuffer(线程安全)、StringBuilder(速度快),减少系统垃圾回收的资源损耗

    String方法:

    substring(int beginIndex, int endIndex)截取字符串并返回其[beginIndex,endIndex-1]范围内的内容

    String类包含三个成员变量:char value[],int offset,int count

    jdk6中,会创建新的字符串,但是这个string仍指向同一个value,只有offset和count不同,容易导致性能问题

    jdk7中,对substring进行了优化,会创建一个新的数组

    replace不使用正则表达式,replaceAll、replaceFirst使用正则表达式,replaceFirst替换第一个

    String s = "my.test.txt";
    System.out.println(s.replace(".""#")); // my#test#txt
    System.out.println(s.replaceAll(".""#")); // ###########
    System.out.println(s.replaceFirst(".""#")); // #y.test.txt

    String 对“+”的重载,在代码执行时引入StringBuilder类,调用append方法进行字符串拼接,最终通过toString 返回结果

    字符串拼接方式:直接+,concat()方法,append()方法等

    String.valueOf()实际是调用了包装类的toString方法

    jdk7中新增了switch对string的支持

    String常量池

    因为String是不可变的,为提升效率,引入了字符串池的概念

    String s3 = "a" + "b"; //"a"是常量,"b"是常量,常量+常量=常量,所以会入池.
    
    String s4 = s1 + "b";   //s1是变量,"b"是常量,变量+常量!=常量,所以不会入池.

    入池之后,会先查找池中有无此对象,如果有,则对象引用指向此对象;如果无,则先创建此对象,再让对象引用指向此对象

    存在于.class文件中的常量池,在运行期被JVM装载,并且是可以扩充的

    intern()方法是一个可以扩充常量池的方法,当String实例调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用

    String s0= "kvill";  
    String s1=new String("kvill");  
    String s2=new String("kvill");  
    System.out.println(s0==s1);  //false
    System.out.println("**********");  
    s1.intern();  
    s2=s2.intern(); //把常量池中“kvill”的引用赋给s2  
    System.out.println( s0==s1);  //false  s1.intern()返回值未赋值给s1
    System.out.println( s0==s1.intern() );  //true
    System.out.println( s0==s2 );  //true
  • 相关阅读:
    VM 下增加磁盘空间
    在APACHE服务器上的访问方式上去除index.php
    1
    数组累加兼eval性能测试
    webstorm软件使用记录
    gulp配置安装使用
    jQuery方法笔记
    搭建Grunt集成环境开发SASS
    msysgit使用方法
    十诫在天主教和新教之间的差别
  • 原文地址:https://www.cnblogs.com/jhin-wxy/p/10497239.html
Copyright © 2020-2023  润新知