split方法一点疑问!~

yj88888 2009-01-03 08:37:23
一个字符串:st1="D1-AB-B1"
我用:string [] st=st1.split("-");后
用了个判断:when(st[0]=="D1")
{......}
我发现不能执行 ,是不是st[0]=="D1"这个等式不成立呢????
我很纳闷 , 应该是成立的啊!!!
求高手赐教!!
谢谢!
...全文
147 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
贾米森 2009-01-06
  • 打赏
  • 举报
回复
学习了!![http://www.heremore.cn]www.heremore.cn[/]
hchen2008 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Looking_Glass 的回复:]
这个问题已经说过N边~唉~==是比较地址,用equals方法才是比较内容~
[/Quote]


学习
IvanZhang050805 2009-01-06
  • 打赏
  • 举报
回复
比较是否内容相等用equals
pxcong007 2009-01-05
  • 打赏
  • 举报
回复
对象类型
“==” 是用于比较地址

基本类型
“==”用于做相等判断。 如1 == 1

切记!
geek87 2009-01-05
  • 打赏
  • 举报
回复
哥们用equals呀。。
http://download.csdn.net/down/666118/programmer0711
http://www.xue5.com/itedu/200707/133203.html

Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,
对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
!!!!equals()的默认行为是比较引用。
所以在think in java 11章P447作者强调: 默认的Object.equals()只是比较对象的地址,所以一个Groundhog(3)并不 等于另一个Groundhog(3)。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,
该协定声明相等对象必须具有相等的哈希码。
==与!=比较的就是对象的引用。
在integer,string等基本类型中,equals()覆写了,是比较的类的内容,而不是引用(即对象的地址);
而自己定义的class中,equals()还是比较的引用


!!!!Java通过重新利用相同的字符串对象从而达到节约系统资源的目的。由于 a1和a2的内容完全相同,因此a1和a2在内存中的地址是完全相同的。正是
因为这样的原因,a1 = a2成立。
那么a3和a4是否象等呢?他们的内容也完全相同。
答案是否定的,因为操作符new强制为a3和a4重新生成新的字符串对象,而
不是重新利用现有的具有相同内容的字符串对象。因此a3和a4在内存中的
地址是不同的,其引用也是不同的。因此,a3 = a4不成立。
所以(以下参考别人的结论并加入自己的结论):
1 Java会重复利用现有的字符串对象。(仅限于同一个类中······参见代码中a.a1==a.b1.a )
2 操作符new强制生成新的对象。
3 操作符 == 进行狭义上的比较,即引用的比较;方法equals进行广义上
的比较,即被引用的值的比较(要自己覆写)。

*/
class A{
Integer i1=new Integer(1);
Integer i2=new Integer(1);
String a1="aaaaaa";
String a2="aaaaaa";
//String a3=new String("aaaaa");
String a3=new String("aaaaaa");
String a4=new String("aaaaaa");
B b=new B();
B b1=new B();
B b2=b;
public static void main(String[] args){

int i3=4;
int i4=4;
A a=new A();
System.out.println("a.i1.equals(a.i2) "+(a.i1.equals(a.i2)));
System.out.println("a.a1==a.a2 "+(a.a1==a.a2));
System.out.println("a.a3==a.a4 "+(a.a3==a.a4));
System.out.println("a.a1==a.b1.a "+(a.a3==a.b1.a));
System.out.println("a.a1.equals(a.b1.a) "+(a.a3.equals(a.b1.a)));
// System.out.println(a.i3==a.i4);
System.out.println("a.a1==a.a3 "+(a.a1==a.a3));
System.out.println("a.a1.equals(a.a3) "+(a.a1.equals(a.a3)));
System.out.println("i3==i4 "+(i3==i4));


本文来源【学网】网站链接是http://www.xue5.com

zh2208 2009-01-05
  • 打赏
  • 举报
回复
用了个判断:when(st[0].equals("D1"))
{......}
yjxqgd 2009-01-04
  • 打赏
  • 举报
回复
顶,应该用equals方法表示是否字符串值相等
tubage408 2009-01-04
  • 打赏
  • 举报
回复
lz应该用equals吧,==是用内存地址来判断的
caojian861006 2009-01-04
  • 打赏
  • 举报
回复
st[0]=="D1" st[0]和"D1" 在内存中开辟了两个空间
使用 == 比较的是引用,肯定不相等,应该使用equals()方法
equals()方法比较两个“对象”的值
Looking_Glass 2009-01-03
  • 打赏
  • 举报
回复
这个问题已经说过N边~唉~==是比较地址,用equals方法才是比较内容~
Looking_Glass 2009-01-03
  • 打赏
  • 举报
回复
这个问题已经说过N边~唉~==是比较地址,用equals方法才是比较内容~

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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