黑马程序员技术交流社区
标题:
Java语言中String字符串对象的注意事项
[打印本页]
作者:
往事~随风
时间:
2018-4-2 22:18
标题:
Java语言中String字符串对象的注意事项
1.判断定义为String类型的s1和s2是否相等
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
注意:==比较的是地址;equals方法比较的是内容.
字符串常量在空间中是存放在方法区的常量池里面的
是为了方便字符串的重复使用.所以"abc" 的地址赋值给
s1和s2所以s1==s2,内容更是相等,所以都为true;
2.下面这句话在内存中创建了几个对象?
String s1 = new String("abc");
创建 两个,在堆内存创立String对象空间,在方法区开辟abc""空间
3.判断定义为String类型的s1和s2是否相等
String s1 = new String("abc");
String s2 = "abc";
System.out.println(s1 == s2); ? false
System.out.println(s1.equals(s2)); ? true
s1存的是在堆内存开辟空间的地址值,该空间的内容指向方法区的"abc"的地址
"abc"是在方法区开辟的字符串对象,也有一个地址值
4.判断定义为String类型的s1和s2是否相等
String s1 = "a" + "b" + "c";
String s2 = "abc";
System.out.println(s1 == s2); ? true
System.out.println(s1.equals(s2)); ? true
java中有常量优化机制 ,和byte b = 3 + 4; 一样的效果
"a","b","c"在方法区自动拼接成"abc"
5.判断定义为String类型的s1和s2是否相等
String s1 = "ab";
String s2 = "abc";
String s3 = s1 + "c";
System.out.println(s3 == s2); false
System.out.println(s3.equals(s2)); ? true
s3这是在堆内存创建StringBuffer或StringBuilder对象,
将字符串用append方法拼接起来,在通过toString方法转成字符串。
作者:
小浙姐姐
时间:
2018-4-6 14:45
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2