黑马程序员技术交流社区

标题: 创造对象的问题,求大神解释 [打印本页]

作者: 落星追恒    时间: 2016-3-21 03:21
标题: 创造对象的问题,求大神解释
String s1 = "ab"; String s3 = s1 + "c";创建了几个对象??为啥?

作者: iamsellen    时间: 2016-3-21 04:24
本帖最后由 iamsellen 于 2016-3-21 16:55 编辑

java编译期间会对其进行优化,优化后的结果就是  String s3=“abc”;
所以最后只有一个String对象。

作者: 落星追恒    时间: 2016-3-21 10:31
iamsellen 发表于 2016-3-21 04:24
2个对象,分别为s1和s3

大兄弟 2个明显不对啊 最少创造了4个 s1 s2 "c" s1+"c"
作者: CangYe    时间: 2016-3-21 14:54
这是创建对象?我怎么觉得只是在声明字符串变量啊?根本没进堆内存
String s1="ab";      String s3="abc";
作者: iamsellen    时间: 2016-3-21 16:59
CangYe 发表于 2016-3-21 14:54
这是创建对象?我怎么觉得只是在声明字符串变量啊?根本没进堆内存
String s1="ab";      String s3="abc"; ...

   
String s1 是声明一个字符串变量。   
= 是赋值。
“abc” 是String对象。
作者: If_091021    时间: 2016-3-21 19:20
3个,S1,S3,“c"也是个字符串对象,但是没有被引用,会被垃圾回收机制回收
作者: 哦哈哟    时间: 2016-3-21 20:27
String s1 = "abc";
--------s1是一个类类型变量, "abc"是一个对象。
--------字符串最大特点:一旦被初始化就不可以被改变。
  String s2 = new String("abc");
  //s1和s2有什么区别?
  //s1在内存中有一个对象。
  //s2在内存中有两个对象。

所以:
String s1 ="ab";     //这里已经有一个对象"ab"了
String s2 = s1+"c";    //这里"c"一个对象,s1+"c"结果是"abc"也是一个对象。
所有一共有创建了三个对象,分别是:"ab","c","abc".

详细可以参考:黑马程序员_毕向东_Java基础视频教程第13天的01-String(概述)。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2