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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈祥厅 初级黑马   /  2013-1-8 23:43  /  1535 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈祥厅 于 2013-1-9 10:04 编辑

Single s=new Single;
Single s=new Single;       如果程序中接连着有2次这样的语句建的是2个对象么,如果是在内存里是啥样的
--------------------------------------------------我是分割线----------------------------------------------

其实我是想问这个懒汉式在多线程的时候不是说会可能在-->A  -->B这里A和B都可能停在这么,然后A又开始了并创建了一个对象,接着B又活了又创建一个对象,这样创建出来是怎么样的2个对象,都叫s?也不对啊

点评

完全是瞎整,语法都是错的  发表于 2013-1-9 00:03

10 个回复

倒序浏览
本帖最后由 修心者 于 2013-1-9 00:05 编辑

首先当你使用new关键字创建对象时。
Single s = new Single();
当执行这句结束后,
在栈空间中会有一个变量s,
那么在堆空间中会有一个Single对象,
变量s则指向这个对象。

a.png (8.26 KB, 下载次数: 42)

a.png

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
你这个问题都不好说什么,每期论坛的开版帖子中,关于提问都有明确要求,希望好好看一下。
曾经有童鞋对于版主审核提问提出过一些疑问,我想说的是版主也不是天生就会,也要自己一点点学得。所以对于哪些问题是应该问的,可以问的,哪些不可以都心理有数,希望最好不要再出现这种水题贴子
回复 使用道具 举报
我是来看老方的{:soso_e136:}
回复 使用道具 举报
不能两次都 定义这个s的吧。。换一个变量名 那就是两个对象啦
Single s=new Single();
Single f=new Single();
回复 使用道具 举报
李培根 来自手机 金牌黑马 2013-1-9 08:47:45
地板
吴愿涛 发表于 2013-1-9 00:09
我是来看老方的

哪里有老方?
回复 使用道具 举报
李培根 来自手机 金牌黑马 2013-1-9 08:50:59
7#
这种情况会报错的,变量名相同。

Single s=new Single();
Single ss=new Single();
只要是new就会在堆内存产生不同的对象。
回复 使用道具 举报
本帖最后由 陈祥厅 于 2013-1-9 09:40 编辑
金鑫 发表于 2013-1-9 00:07
你这个问题都不好说什么,每期论坛的开版帖子中,关于提问都有明确要求,希望好好看一下。
曾经有童鞋对于 ...


其实我是想问这个懒汉式在多线程的时候不是说会可能在-->A  -->B这里A和B都可能停在这么,然后A又开始了并创建了一个对象,接着B又活了又创建一个对象,这样创建出来是怎么样的2个对象,都叫s?也不对啊
回复 使用道具 举报
舒远 黑马帝 2013-1-9 09:22:27
9#
人家贴图的代码哪里有问题?没明白人家提问的关键点,就说人家问的不好。实际是你们自己不懂而已!
回答:
当多线程情况下,代码s = new Single();可能会被多次执行,产生并发问题的原因就是楼主你自己说的,A和B线程都有可能进入到s = new Single();的代码部分,这样后进入的线程创建的对象就将前一个创建的对象给覆盖掉了。前一个对象会被垃圾回收,栈中没有引用指向它。
就针对你当前的代码来看,创建的两个对象实质是一样的,只不过内存中曾经产生过两个Single的实例,这与单例的思想就不符合了。
回复 使用道具 举报
舒远 发表于 2013-1-9 09:22
人家贴图的代码哪里有问题?没明白人家提问的关键点,就说人家问的不好。实际是你们自己不懂而已!
回答:
...

哦哦~晓得了~~~~是我原来问问题的方式不对不是他们不懂~分割线以下的问题是后来补上的:P
回复 使用道具 举报
舒远 发表于 2013-1-9 09:22
人家贴图的代码哪里有问题?没明白人家提问的关键点,就说人家问的不好。实际是你们自己不懂而已!
回答:
...

他的图是今天加上去的,昨天提问的问题时候确实不对,不然老方也不会发飙了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马