A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1151528062 初级黑马   /  2018-12-15 17:51  /  691 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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 同上

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马