黑马程序员技术交流社区
标题:
String的小心得
[打印本页]
作者:
1151528062
时间:
2018-12-15 17:51
标题:
String的小心得
String字符串的定义:凡是带双引号的都为字符串
字符串的几种创建方式:
1、用String构造方法创建字符串
String str = new String(String a);
该构造方法有几种重载形式1、byte[ ] a
2、char[ ] a
3、空
2、直接赋值定义的字符串
Eg:String str = “abc”;
通过这种方式定义的字符串会有一个“字符常量池”,“字符常量池“的作用创建字符对象并且存储直接赋值定义的字符串对象地址,它有一个特点,一旦有字符串存入字符常量池,发现里面存储了与自己元素相同的对象地址,那么那会直接拿来作为自己的指向地址;该特点的实例String a1 = “abc”; String a2 = “abc”; a1 == a2;在先前学习对象时候学过,new出来的对象其对象名保存的不是对象中存储的值而是一个地址,两个不同的对象其地址是不可能相同,因此a1 == a2其值为true那就表示两者的地址值相同,那么也就证明了字符常量池中的特点
印象加深题
String str1 = “abc”;
String str2 = “abc”;
Char[ ] s1 = new Char[ ]{‘a’,’b’,’c’};
String str3 = new String(“abc”);
String str4 = new String(s1);
请问以下式子的值为True还是false?
1、Boolean a1 = str1 == str2;
2、Boolean a2 = str1 == str3;
3、Boolean a3 = str1 == str4;
4、Boolean a4 = str2 == str4;
5、Boolean a5 = str3 == str4;
6、Boolean a6 = str1.equals(str2);
7、Boolean a7 = str1.equals(str3);
8、Boolean a8 = str1.equals(str4);
9、Boolean a9 = str2.equals(str4);
10、Boolean a10 = str3.equals(str4);
答案
1、true 两个都是直接赋值创建的字符串,且元素值相同符合字符常量池的特点
2、false str2直接赋值创建的字符串,str3通过构造方法创建字符串,两者的字符串地址不同因此为 false
3、false str4是构造方法的参数接收了一个char[ ]类型数组中的值,并没有改变自身str4的地址,因此和str1的地址不同
4、false 同上
5、false 不同对象其地址值不同
6、true equals比较的该地址所对应的值,str1和str2都值都为”abc”因此相等
7、true 同上
8、true 同上
9、true 同上
10、true 同上
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2