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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马杨晨 中级黑马   /  2012-8-27 15:15  /  2204 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马杨晨 于 2012-8-28 14:58 编辑

String str = new String("abc");

new 的时候调用构造函数,返回给str;

看似又有返回值?

7 个回复

倒序浏览
1.构造函数是一种特殊的函数
2.函数名和类名一样, 没有返回值类型, 创建对象时自动调用
3.在定义一个类的时候, 如果希望别人创建对象时就执行某些操作, 那么就可以在构造函数中定义一些代码.


new一个对象只是在堆内存中创建一个对象,然后将对象的地址赋给str变量,并不是构造函数的返回值给了str
回复 使用道具 举报
String Pool (字符串池)
String s = “ aaa ” ;
查找 String Pool 中是否存在“ aaa ”这个对象,如果不存在,则在 String Pool 中创建 一个“ aaa ” 对象,然后将 String
Pool 中的这个“ aaa ”对象的地址返回来,赋给引 用变量 s ,这样 s 会指向 String Pool 中的这个“ aaa ”字符串对象 2) 如果存在,则不创建任何对象,直接将 String Pool中的这个“ aaa ”对象地址返回来, 赋给 s 引用。

String s = new String( “ aaa ”);
首先在 String Pool 中查找有没有“ aaa ”这个字符串对象,如果有,则不在String Pool 中再去创建“ aaa ”这个对象了,直接在堆中( heap )中创建一个“ aaa”字符串对 象,然后将堆中的这个“ aaa ”对象的地址返回来,赋给 s 引用,导致 s 指向了堆中 创建的这个“ aaa ”字符串对象。 2) 如果没有,则首先在 String Pool中创建一个“ aaa “对象,然后再在堆中( heap )创 建一个” aaa“对象,然后将堆中的这个” aaa “对象的地址返回来,赋给 s 引用,导致 s指向了堆中所创建的这个” aaa “对象。     
回复 使用道具 举报
你是String类名??
构造方法是一个特殊的方法,与一般方法有三点不同:
构造方法必须与类同名;
构造方法没有返回类型,连oid都没有;
构造方法调用在创建一个对象时使用new关键字执行。
主要作用初始化对象.
你的没有返回值
回复 使用道具 举报
构造函数是没有返回值的,它是用来初始化对象的。
str是在栈内存中创建的一块空间的名字,堆内存中存的是abc,然后把abc所在的内存地址赋给str,
或者说str引用了abc所在地址,并没有返回值。
回复 使用道具 举报
{:soso_e100:}这个真没有!{:soso_e121:}
回复 使用道具 举报
楼主这样的说法貌似是把返回值和赋值的概念混淆了,
“返回给st”应改为“把“ abc ”的地址赋值给st”
回复 使用道具 举报
String str = new String("abc");

new 的时候调用构造函数,返回给str;

看似又有返回值?

严格来说,构造函数是没有返回值的。
它的作用仅仅是初始化对象,并返回该对象的实例

当然你也可以认为它有返回值,因为它返回了对象的实例
new String("abc");这条语句返回了一个对象的实例,并给该对象里的成员初始化初值
你觉得它有返回值 很正常

但是 严格来说 构造函数没有返回值
它只能通过new关键字来返回对象的实例
不能被void修饰 因此它没有返回值
返回的是一个对象实例
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马