zoukankan      html  css  js  c++  java
  • String

    1.  String 

       1.Java 中String 是一个不可变类,即创建一个String对象后,是不能直接改变字符串中的某个字符的。

       2.为什不可变?因为用于存储String值的仍然是一个char型数组,并且注意到它是final修饰的,不可更改。

       3.设计成不可变的好处:效率(因为对象不可变,所以可以使用常量池的方式优化效率;因为对象不可变,所以String对象可以自身缓存HashCode)、安全(String被许多的Java类(库)用来当做参数,例如 网络连接地址URL,文件路径path,还有反射机制所需要的String参数等, 假若String不是固定不变的,将会引起各种安全隐患)

       4.String 常量池:

       对于不可变对象使用String 常量池,不然修改变量string1的值,string2的值也发生变化了。常量池的存在无疑大大降低了创建、拷贝等操作的时间复杂度和空间复杂度。

    String s1="ab"+“cd”;
    String s2="abc"+"d";
    System.out.println(s1==s2);
    
    String s3=new String("ab");
    String s4=new String("ab");
    System.out.println(s3==s4);

       这答案分别是 true  false。,我们由答案可以知道:String类确实是不可变类,"ab"+"cd"被当做了新字符串而不是续接"ab"(不然"ab"和"abc"肯定不会地址一样);常量池确实存在,同是"abcd",所有对"abcd"的引用都指向同一地址;如果使用new 的话就会直接分配新的地址。

    2.  String, Stringbuffer, StringBuilder 的区别。

        String 字符串常量(final修饰,不可被继承),线程不安全,String是常量,当创建之后即不能更改。(可以通过StringBuffer和StringBuilder创建String对象(常用的两个字符串操作类)。) 

       StringBuffer 字符串变量(线程安全)其toString方法会进行对象缓存,以减少元素复制开销,支持同步锁。

       StringBuilder 字符串变量(非线程安全)其toString的时候,会直接返回一个新对象。

       

  • 相关阅读:
    UVA 562 Dividing coins --01背包的变形
    HDU 2602 Bone Collector --01背包
    Topcoder SRM 618 Div2 --900
    【转】Python 列表排序
    线段树之区间最大连续和问题
    【转】Python中string的strip,lstrip,rstrip用法
    《Python核心编程》部分代码习题实践(持续更新)
    《Python核心编程》部分错误纠正(勘误表)(持续更新)
    UVA 103 Stacking Boxes --LIS
    POJ 1836 Alignment --LIS&LDS
  • 原文地址:https://www.cnblogs.com/jkzr/p/10569361.html
Copyright © 2011-2022 走看看