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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

问题1我声明了什么!String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容“Hello world!”这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半的人大概会回答错误。这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句:String string = s;我们是声明了另外一个只能指向String对象的引用,名为string并没有第二个对象产生string还是指向原来那个对象,也就是,和s指向同一个对象。String s1 = "This is cool!"; // 生成一个字符串对象[OBJ_1],将其引用赋值给s1String s2 = "This is cool!"; // 将同样的对象[OBJ_1]的引用赋值给s2String s3 = new String("This is cool!"); // 新建一个字符串对象[OBJ_2],其引用赋值给s3;s1 = s2; // s2保存的[OBJ_1]的引用赋值给s1,没有实际效果s3 = "This is cool!"; // [OBJ_1]的引用赋值给s3s3原先引用的[OBJ_2]不再被引用 这样的代码共有产生2String实例,有1对象可以被GC

1 个回复

倒序浏览
恩不错奥  进步了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马