zoukankan      html  css  js  c++  java
  • java中的String、StringBuilder、StringBuffer

    1、String 字符串常量,但是它具有不可变性,就是一旦创建,对它进行的任何修改操作都会创建一个新的字符串对象。
    2、StringBuffer 字符串可变量,是线程安全的,和StringBuilder类提供的方法完全相同。如果查看java的源代码,就会发现它和StringBuilder类的方法的区别就是,在每个方法前面添加了"synchronized",保证其是线程安全的。
    3、StringBuilder 字符串可变量,是线程不安全的。从jdk5中加入。
    4、StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。
    5、串池
     //StringTest1
     String str1 = "abc";
     String str2 = "abc";
     System.out.println(str1 == str2); // true
     
     //StringTest2
     String str1 = new String("abc");
     String str2 = new String("abc");
     System.out.println(str1 == str2);  // false
     java的String是不可改变的字符串对象。为了提高效率,java为String类提供了串池。在StringTest1中就使用了串池。当你重新声明一个String型变量为abc时,将使用串池里原来的那个abc,而不重新分配内存,也就是说,str2与str1将会指向同一块内存。所以结果为true。在StringTest2中使用了普通对象的声明方式,系统将会为str1和str2各分配一块内存。所以结果为false。
    6、其他
     String s1 = "a";  
     String s2 = "b";  
     String s3 = "ab";  
              
     String s4 = "ab";  
     System.out.println("s3==s4 -> "+ (s3==s4)); //根据String的概念他们都指向了同一个缓冲池内的地址,所以结果为true。
     
     String s5 = "a"+"b";  
     System.out.println("s3==s5 -> "+ (s3==s5)); //因为相加的两个为常量,所以编译器会把s5="a"+"b"优化为s5="ab",所以结果也为true。
              
     String s6 = s1+s2;  
     System.out.println("s3==s6 -> "+ (s3==s6)); //因为是两个变量的相加所以编译器无法优化,s1+s2即等同于(new StringBuilder(String.valueOf(s1))).append(s2).toString(); 在运行时,会有新的String地址空间的分配,而不是指向缓冲池中的“ab”。所以结果false。
              
     String s7 = new String("ab");  
     System.out.println("s3==s7 -> "+ (s3==s7)); //根据缓冲池的定义在new的时候实际会新分配地址空间,s7指向的是新分配的地址空间所以与缓冲池地址不同,所以为false。
              
     final String s8 = "a" ;   
     final String s9 = "b" ;  
     String s10 = s8 + s9;  
     System.out.println("s3==s10 -> "+ (s3==s10)); //类似于s3与s5,因为是final类型编译器进行了优化所以相同。

  • 相关阅读:
    leetcode 296 题解(暴力破解)
    2.7最大公约数(递归解法)
    2.6斐波那契数列(多分支递归)
    2.5翻转字符串(递归4 )
    2.4对arr数组元素求和
    2.3 用递归形式打印i到j
    2.2用递归方式解决阶问题
    2.1什么是递归?
    1.用数组的方式实现列表
    如何在电脑上安装Jupyter Notebook
  • 原文地址:https://www.cnblogs.com/robertsun/p/5234470.html
Copyright © 2011-2022 走看看