详解String类型
2019-06-27 本文已影响0人
coderymy
- String不是基础数据类型
- 这种变量的创建并不是一个盒子的概念,而是一个名字的概念,也就是说我创建一个String a="aaa",其实对于底层是这样的
创建一个a,指向一块物理块,物理块中指向三个a的char
String
所以说,其实对于String来说,它是一个引用数据类型,但是它有不像其他的引用数据类型那样需要new,所以说String是一个很奇怪的数据类型
- 对于正常的基础数据类型来说,有一个常量池的概念,所以对于String来说,其实一个String类型的变量它是一个名字,它指向一个盒子,这个盒子中装着很多char类型的引用
- 综上所述,就会出现这种情况
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的地址
- "=="和.equals(),前者其实比较的是引用,后者比较的是变量的内容
总结,只需要记住,String类型,它不是基础数据类型,不是一个盒子的概念,而是一个名字的概念
所以会出现a==b但是a.equals(b)为false的情况
String是一个引用的概念,是告诉jre,到哪里去给我拼出来需要的字符