Topic: String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 |
Print this page |
1.String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 | Copy to clipboard |
Posted by: topirol Posted on: 2004-02-23 13:31 String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 |
2.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: ringayumi Posted on: 2004-02-23 14:04 String a = "sss"; <== it's in "String pool". String a = new String("sss"); <== it's in "Heap"; |
3.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: ringayumi] | Copy to clipboard |
Posted by: hahaha Posted on: 2004-02-23 16:17 好象是在equals与==操作时是有区别的 |
4.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: newnewworm Posted on: 2004-02-23 18:05 经过测试, 假设 Sting a ="sss" 和String b = new String("sss") 两者a==b 是flase的 a.equals(b) 却是true的! |
5.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: topirol Posted on: 2004-02-23 19:07 知道了:ringayumi 说的有道理 不一样的。 前者会检查缓冲池中有没有"sss",如果有就不分配新的系统资源生成对象了,所以有可能引用的是同一个地址。 后者每一次生成新的对象,不可能出现引用同一个地址的情况。 |
6.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: Starcraft Posted on: 2004-02-23 21:47 呵呵,我在sun社区回复你了。 |
7.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: topirol Posted on: 2004-02-24 08:48 呵呵,原来是楼上的朋友回复(这个问题也是我在一个论坛上看到的,自己也想知道才到处问的)的,真是谢谢,本人初学JAVA,以后请多多指教阿:) |
8.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: JavaCodinger Posted on: 2004-02-24 13:28 地址不同 |
9.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: newnewworm] | Copy to clipboard |
Posted by: chenxihua Posted on: 2004-02-24 22:25 申明:Java初学者 to: newnewworm newnewworm wrote: 结果为true应该属于正常, 仅仅比较了String对象的具体内容 String override 了equals方法, public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } } return false; } 不过这样做是否有误导之嫌,毕竟equals方法很多场合下是用来比较是否同一对象,至少应该起另外的名字吧。 |
10.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: zgd Posted on: 2004-02-25 02:42 第一个不一定产生新对象 第二个一定产生新对象 |
11.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: nowplay Posted on: 2004-02-26 11:10 一回事。 由于都是常量,所以java会把这个常量的应用+1,然后把这个常量的object赋给返回的对象。 String a="sss"; String b=new String("sss"); a和b完全相等,但是a<>b,的确奇怪,因为a和b都是对象,对象只能equals,不能=。 从C++角度来看,a和b都是指针,是两个地址,怎么相等? |
12.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: nowplay Posted on: 2004-02-26 11:26 怪事 String a=new String("SSS"); String b=new String("SSS"); if(a==b) System.out.println("a==b"); else System.out.println("a<>b"); b=a; if(a==b) System.out.println("a==b"); else System.out.println("a<>b"); 输出结果是,a<>b,a==b |
13.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: topirol Posted on: 2004-02-26 11:54 我也觉得奇怪,有没有高手解释一下? |
14.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: maogua Posted on: 2004-02-26 20:24 看thinkinjava就明白了 |
15.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: daminggege Posted on: 2004-02-26 22:23 老套问题了,好多地方都有上面推荐think in java 要是看看深入java虚拟机是不是更明白 |
16.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: dingligang Posted on: 2004-02-27 14:13 //看看 ringayumi 的观点吧;应该是正确的。 //这个对象在常量池中创建,只要是字符串"sss",就只创建一次 String a1 = "sss"; String a2 = "sss"; //等价于 String a = new String("sss"); String a1 = a; String a2 = a; // //这个和一般的对象一样去对待 String b1 = new String("sss"); String b2 = new String("sss"); 注意Stirng类对boolean equals(String str)方法的定义 |
17.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: dearmeiw Posted on: 2004-02-28 00:53 String缓冲机制的问题 |
18.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: anders02 Posted on: 2004-03-01 20:24 第一个不一定产生新对象 第二个一定产生新对象 用equals是比较两个对象句柄的内容,和==当然不一样。 |
19.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: adrop Posted on: 2004-03-13 19:28 equals是object的函数,比较的是对象的引用,不能比较数值,但是String和外覆类重载了他,是比较的数值。 |
20.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: iamyourbrother Posted on: 2004-04-30 10:43 没区别 |
21.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: dingjunming Posted on: 2004-04-30 18:53 这不是和c++那个一样,地址和对象的区别 |
22.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: nowplay] | Copy to clipboard |
Posted by: lobster Posted on: 2004-05-18 13:34 nowplay wrote: String不能这样比较的,这样只是比较了他它们当前的内存地址, 应该这样才能实现比较 if(string1.equals(string2)) System.out.println("string1 is the same string2."); ... ...... 因为String类型不是Java提供的基本数据类型,不能有逻辑操作符来比较的。 |
23.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: whirl79 Posted on: 2004-05-19 22:45 一个是String对象,String f = new String(“ff”); 一个是String的类型变量 String f =“ff”; |
24.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: kjjx Posted on: 2004-05-20 10:40 == 比较的是reference equals 比较的是对象的内容. String a = new String("sss"); String b = new String("sss"); System.out.println(a==b); // output : false; System.out.println(a.equals);//output :true; |
25.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: michaelbeyond Posted on: 2004-05-21 11:51 区别是有的 可以参考喉结翻译的Practical Java的第二章节 前者是保存变量值(此处说的肯定不地道,但是也不知道怎么说比较好),后者生成了String对象,保存对该对象的引用,该引用的内容为sss。 两者要相等,看对equals比较的是什么,需要时得重载equals方法达到你需要比较什么的目的。 茹本人较菜,请参考那个Practical Java很不错的,说非常清楚。 |
26.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: j2ee_ejb Posted on: 2004-05-24 14:32 呵呵 在这里==是比较引用是否同一个堆上的“sss” 而equals则是比较应用的东东是否相等 |
27.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: scottding Posted on: 2004-05-25 13:07 我只想说一句话,不要用: String b = new String("sss"); |
28.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: LH258 Posted on: 2004-05-30 02:25 怪事 String a=new String("SSS"); String b=new String("SSS"); if(a==b) System.out.println("a==b"); else System.out.println("a<>b"); b=a; if(a==b) System.out.println("a==b"); else System.out.println("a<>b"); 输出结果是,a<>b,a==b 第1句和第2句是定义字符串引用a和b,为什么是a<>b,参见字符串的比较==和equals的区别, b=a;这句是a和b指向同一个引用,就像同一个事物分别帖上不同的标签,至于为什么是a==b,见字符串的方法==的定义 简言之,字符串的==方法是比较两个对象的引用,而equals方法是两个对象的内容的比较 |
29.Re:String a = "sss";和String a = new String("sss");有什么区别吗?谢谢 [Re: topirol] | Copy to clipboard |
Posted by: 风暴冲浪 Posted on: 2004-05-30 14:16 Stirng a="ssss"; String b=new String("sss"); new的功能有三种是: * 可以创建新的对象; * 分配内存; * 调用构造函数; 前者只是生成了一个对象。。。 "=="与“equal",前都比较的是两个地址是不是相同(即指向同一个对象)而用equal是比较两对象的值是不是相等。。。 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |