zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    浏览器允许跨域运行字符串
    检查失败,<master>分支有过其他更新,请先在本地合并<master>分支的代码
    微信公众号开发点点滴滴
    手机上的软件开发应该
    见过写过最好的代码
    Prometheus之新版node_exporter监控主机设置
    Granfana设置邮件告警
    linux 中添加自己的库路径的方法 cannot open shared object file: No such file or directory
    C# this.Invoke()的作用与用法
    C#中this.Invoke()中委托的定义
  • 原文地址:https://www.cnblogs.com/jhin-wxy/p/10497239.html
Copyright © 2011-2022 走看看