详解String类型

  1. String不是基础数据类型
  2. 这种变量的创建并不是一个盒子的概念,而是一个名字的概念,也就是说我创建一个String a="aaa",其实对于底层是这样的

创建一个a,指向一块物理块,物理块中指向三个a的char


详解String类型_第1张图片
String

所以说,其实对于String来说,它是一个引用数据类型,但是它有不像其他的引用数据类型那样需要new,所以说String是一个很奇怪的数据类型

  1. 对于正常的基础数据类型来说,有一个常量池的概念,所以对于String来说,其实一个String类型的变量它是一个名字,它指向一个盒子,这个盒子中装着很多char类型的引用
  2. 综上所述,就会出现这种情况

String a="hello"
String b="hel"+"lo"
String c="hel"+new String("lo")
String d1="h";
String d2="ello"
String d=d1+d2;
a==b:true
a==c:false,因为,a的引用时标准的引用,但是c的引用其实是指向了d1+d2的地址

  1. "=="和.equals(),前者其实比较的是引用,后者比较的是变量的内容

总结,只需要记住,String类型,它不是基础数据类型,不是一个盒子的概念,而是一个名字的概念
所以会出现a==b但是a.equals(b)为false的情况
String是一个引用的概念,是告诉jre,到哪里去给我拼出来需要的字符

你可能感兴趣的:(详解String类型)