编程语言
首页 > 编程语言> > Java学习笔记(16)——String

Java学习笔记(16)——String

作者:互联网

String

最终类,没有子类;Java中的所有的字符串直接量都是string类的对象。
	string类的对象都是常量,字符串都是常量,值创建后不能被改变,
	因为字符串底层都是依赖于不可改变的字符数组来实现的,创建之后不能改变。
	如果string类的对象的内容一致时,则会共享一个常量池里的引用。
	如果等号右边的值都是直接常量,编译时进行优化,即将最终结果进行存储。
字符串的底层实现
//字符串创建对象的形式
  String str1 = "ab";
  String str2 = new String("ab");
  String str3 = "ab";
  String str4 ="a"+"b";
  String str5 ="a";
  str5 = str5 + "b";
  //比较地址值
  System.out.println(str1==str2);//false   因为创建了新的对象 即new了
  System.out.println(str1==str3);//true 
  System.out.println(str1==str4);//true
  System.out.println(str1==str5);//false
  System.out.println(str2==str5);//false
 /*  String str1 = "ab"; 指向常量池
  *   方法区 = 静态常量池 + 运行常量池(所有的常量)
  *   堆的地址存于方法区的常量池
  *   栈中存储的是方法区常量的地址
  *   栈通过指向方法区的地址间接的访问堆的地址
  *   String str2 = new String("ab"); 指向堆
  *   在堆内存中存储常量的地址
  *   栈内存中存储的是堆内存的地址
  *   String str3 = "ab";  指向常量池
  *   String str4 ="a"+"b"; 指向常量池       
  * byte b = 128-1; 直接量进行运算时,编译时直接进行优化拼接 相当于 “ab”.
  *   String str5 ="a";str5 = str5 + "b"; 不是直接量的优栈内存和常量池的地址的指向
  */

标签:ab,Java,常量,16,str1,str5,地址,String
来源: https://blog.csdn.net/qq_42351519/article/details/111304189