每个初学者都应该搞懂的问题(1)

Sheepy 2004-03-21 07:55:41
对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。

问题1
我声明了什么!

String s = "Hello world!";

许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半的人大概会回答错误。
这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句:

String string = s;

我们是声明了另外一个只能指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。
...全文
1623 261 打赏 收藏 转发到动态 举报
写回复
用AI写文章
261 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyhu 2004-09-23
  • 打赏
  • 举报
回复
GC倒是值得去研究一下。
wjbboo 2004-09-22
  • 打赏
  • 举报
回复
up
kkkkwx 2004-09-17
  • 打赏
  • 举报
回复
好帖!就喜欢这种帖子!谢谢楼主!
joerico 2004-09-17
  • 打赏
  • 举报
回复
看着贴真是累啊~~

不过收获不小。呵呵~~

楼主抛砖引玉,好人啊~~
gwang119 2004-09-17
  • 打赏
  • 举报
回复
好贴!java的基础!
顶呀!
Sheepy 2004-09-17
  • 打赏
  • 举报
回复
“只声明了一个引用变量”

仔细想想这句话是可能引起歧义。我的意思是:没有声明对象,而是声明了一个指向对象的引用。
至于hello world!是如何从无到有的,就是另外一回事了。这就是为什么有同志建议我下次不要用String举例子,而用Object。其实Java对String这个常用类有特别照顾,碰到"hello world"这样用引号表示的字符串常量,它会自动生成对象。并且内容相同的字符串常量在内存里只有一个对象表示。所以:

String s1 = "s";
String s2 = "s";
if (s1==s2) //总是true
...
heibai520 2004-09-14
  • 打赏
  • 举报
回复
我还是不是很明白,
难道 String s="hello world!" 这样的一个语句就只是声明了一个引用变量吗?
那么那个hello world这个字符串是从无到有的啊?我想应该也同时创建了一个字符对象吧!
要不它是怎么来的啊?而且当我再声明一个 String ss=s,这时这个ss就应该是指向hello world这个字符串对象吧!
请高手帮我解一下好吗?上面好像没有提到这个东西啊!
xueqs 2004-09-13
  • 打赏
  • 举报
回复
up
heidongstar 2004-09-13
  • 打赏
  • 举报
回复
看不出有什么好的。
基本概念罢了。
roydu 2004-09-13
  • 打赏
  • 举报
回复
一不小心给搞晕了,真强
onlyxu 2004-09-13
  • 打赏
  • 举报
回复
这是很简单的问题,不过下句说的不准确:
"我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量"
应该为:
我们创建了一个String对象,并且声明了一个指向此String对象的引用(或句柄)
matchchen 2004-09-13
  • 打赏
  • 举报
回复
chang
zxqkim 2004-09-13
  • 打赏
  • 举报
回复
hao
heibai520 2004-09-13
  • 打赏
  • 举报
回复
我还是不是很明白,
难道 String s="hello world!" 这样的一个语句就只是声明了一个引用变量吗?
那么那个hello world这个字符串是从无到有的啊?我想应该也同时创建了一个字符对象吧!
要不它是怎么来的啊?而且当我再声明一个 String ss=s,这时这个ss就应该是指向hello world这个字符串对象吧!
请高手帮我解一下好吗?上面好像没有提到这个东西啊!
huangshengcsdn 2004-09-12
  • 打赏
  • 举报
回复
好贴!!!!!
opencsdn 2004-09-12
  • 打赏
  • 举报
回复
顶顶,加深印象!
tdmlxq 2004-09-12
  • 打赏
  • 举报
回复
大家讨论得实在太经典了啊
我看了一下午
jackyzgm 2004-09-10
  • 打赏
  • 举报
回复
很好的一个问题。。

业余和专业的区别就在于是否把这些问题搞懂。。

我们不是只要有好的结果,更要有个好的过程,好的思想。。

而这个好的思想可以继承到其他的工作中去,形成好的习惯,一定会令你受益匪浅。。

想偷懒谁都做的到,你能做的更好,就是进步。。

所以,支持楼主。
baffling 2004-09-10
  • 打赏
  • 举报
回复
顶!
xwj1003 2004-09-10
  • 打赏
  • 举报
回复
JAVA板各大高手风云此处
好不潇洒!
看来此贴不定不行啊!!!!!
加载更多回复(240)

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧