a和b有什么区别??

yangq119 2003-07-17 03:13:16
a和b有什么区别??

import java.lang.* ;
public class test1{
public static void main(String args[]){
String a = new String( System.getProperty("java.version")) ;
String b = System.getProperty("java.version") ;
System.out.println(a) ;
System.out.println(b) ;
}
}
输出结果a和b是一样的阿!!
...全文
134 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcdhy 2003-07-24
  • 打赏
  • 举报
回复
哈哈,java 是传值的,只是对于基本类型来说的.

对于,"类",全部都是传地址的!!!!!!!!!

不信你可以自己写一个程序来试试!!!!
yangq119 2003-07-20
  • 打赏
  • 举报
回复
那在定义和使用的时候有什么不一样呢,要注意什么呢!!!
java是值传递的,那地址对java来说有什么意义呢,我对垃圾回收不怎么熟悉啊,望大家
说说了,
abcdhy 2003-07-19
  • 打赏
  • 举报
回复
错了,不一样的

你看看, <Effective Java> 就知道的

主要是 String 是一个不变类,为了提高效率,正常创建的 相同的 String 都是同一个对象,但
String a = new String( System.getProperty("java.version")) ;
String b = System.getProperty("java.version") ;
这样就不是同一个对象了.
painAndhappy 2003-07-19
  • 打赏
  • 举报
回复
to:
htl(海豚) ( )
真的是这样吗?
也要看具体每个类里面是怎样实现的吧
htl 2003-07-19
  • 打赏
  • 举报
回复
"=="表示两个对象完全相同
".equals"仅仅表示值相同
yangq119 2003-07-18
  • 打赏
  • 举报
回复
小弟在这里先谢大家了,呵呵,看来要加点分啊,
我提的问题,a和b的用法是一样的了,这个大家确定了啊,说到地址,是不是象c++里分配动态
内存的那样呢,用new分配的在栈里,a和b的内存空间根本就不一样啊,!!!


那就顺便大家给点建议了,有什么好书推荐啊,我需要大量java code啊,大家知道哪里有吗?
handsomeghost 2003-07-18
  • 打赏
  • 举报
回复
if (a==b) System.out.print("a=b");
if (a.equals(b)) System.out.print("a.equals(b)");
可以看出他们的不同,同样的值但不同的内存地址。
同时java虚拟机的垃圾回收时也视其不同,当a或b被别的字串负值后,可能就被当作垃圾回收了,你可以通过这个方式发觉他们的不同。
随风来去 2003-07-18
  • 打赏
  • 举报
回复
好像对于String对象,由于其不可变性,虚拟机在生成这样的对象时,都是使用同一个地址
即a和b不但内容相同,而且地址也一样
zuoyangguang 2003-07-18
  • 打赏
  • 举报
回复
楼主真是幸运,这么多高手(我除外)为您排忧解难
CastleKtt 2003-07-17
  • 打赏
  • 举报
回复
仔细想了一下,a和b在使用上没有区别,a和b都是值和System.getProperty("java.version")相等的String实例,都不是真正内存中的属性。但是a生成时的效率比b低,因为在System.getProperty("java.version")时已经new了一个实例,再次new的时候又生成一遍实例。
CastleKtt 2003-07-17
  • 打赏
  • 举报
回复
a是一个新建String实例,他的值和System.getProperty("java.version")一样,但是不是System.getProperty("java.version").
b就是System.getProperty("java.version")
hayai 2003-07-17
  • 打赏
  • 举报
回复
这么说吧,你买了两支一模一样的圆珠笔,它们是不是相同呢?他们是不是就是一支笔呢?
所以,a.equals(b), 因为他们的确一模一样。
所以,a != b,因为他们本来就是两支笔。一支笔用完了,另一支笔还是满的。
当年古龙就是这样对我解释的。
yangtaylor 2003-07-17
  • 打赏
  • 举报
回复
虽然他们的值相同,但是给它们分配的内存地址不同。
这样就清楚了吧。你可以把它们的内存地址打印出来看一看。
zuoyangguang 2003-07-17
  • 打赏
  • 举报
回复
楼上的说的与楼主问的是俩回事
DDrddr 2003-07-17
  • 打赏
  • 举报
回复
请看 System 的 static String getProperty(String key) 方法,返回的是String
jspxnet 2003-07-17
  • 打赏
  • 举报
回复
你用下边的语句运行看看就明白了.

if (a==b) System.out.print("a=b");
if (a.equals(b)) System.out.print("a.equals(b)");
zuoyangguang 2003-07-17
  • 打赏
  • 举报
回复
有何不同,一样的
super_jack 2003-07-17
  • 打赏
  • 举报
回复
就象这样:
String a = new String("hello") ;
String b = "hello";
a,b当然是一样的值,但却是两个不同的对象!

62,616

社区成员

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

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