| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1385 人关注过本帖
标题:String类问题?求助
只看楼主 加入收藏
he20041987
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2007-9-10
结帖率:100%
收藏
 问题点数:0 回复次数:12 
String类问题?求助
String str1 = new String("abc");
   
Stirng str2 = "abc";    //这里的abc是在栈中还是堆中啊? 我自己觉得在堆中,但怎么又重新创建了一个对象呢?
                        //两次比较都是比的地址值,怎么会有不同的结果啊?
 if(str1 == str2){   
         System.out.println("str1 == str2");   
 }else{   
         System.out.println("str1 != str2");   
 }   
   
   
  String str3 = "abc";   
   
  if(str2 == str3){   
         System.out.println("str2 == str3");   
  }else{   
         System.out.println("str2 != str3");   
  }
搜索更多相关主题的帖子: String 
2008-04-06 10:32
谁与争疯
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:海南省
等 级:版主
威 望:191
帖 子:15071
专家分:17513
注 册:2007-4-22
收藏
得分:0 
str1!=str2!=str3
因为它们的引用是不同的。

论坛是我家灌水靠大家
2008-04-06 10:34
he20041987
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2007-9-10
收藏
得分:0 
在产在str2时 堆中有它的值啊 怎么不是先用equels去判断的呢?我上面的理解有没有问题啊?是在堆中吧!
2008-04-06 10:36
谁与争疯
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:海南省
等 级:版主
威 望:191
帖 子:15071
专家分:17513
注 册:2007-4-22
收藏
得分:0 
似乎是存在栈中的吧?

论坛是我家灌水靠大家
2008-04-06 10:39
he20041987
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2007-9-10
收藏
得分:0 
String str1 = new String("abc");     
Stirng str2 = "abc";   

     虽然两个语句都是返回一个String对象的引用,但是jvm对两者的处理方式是不一样的。对于第一种,jvm会马上在heap中创建一个String对象,然后将该对象的引用返回给用户。对于第二种,jvm首先会在内部维护的strings pool中通过String的 equels 方法查找是对象池中是否存放有该String对象,如果有,则返回已有的String对象给用户,而不会在heap中重新创建一个新的String对象;如果对象池中没有该String对象,jvm则在heap中创建新的String对象,将其引用返回给用户,同时将该引用添加至strings pool中。注意:使用第一种方法创建对象时,jvm是不会主动把该对象放到strings pool里面的,除非程序调用 String的intern方法。

帮忙解释一下这里吗?自己实在是不理解啊!都发了好多帖了。

[[it] 本帖最后由 he20041987 于 2008-4-6 10:56 编辑 [/it]]
2008-04-06 10:41
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
当规则记好了..你不是记得很清楚吗?呵呵
class string{
    public static void main(String []args){
    

String str1 = new String("abc");
   
String str2 = "abc";    //这里的abc是在栈中还是堆中啊? 我自己觉得在堆中,但怎么又重新创建了一个对象呢?
                        //两次比较都是比的地址值,怎么会有不同的结果啊?
if(str1 == str2){   
         System.out.println("str1 == str2");   
}else{   
         System.out.println("str1 != str2");   
}   
   
   
  String str3 = "abc";   
   
  if(str2 == str3){   
         System.out.println("str2 == str3");   
  }else{   
         System.out.println("str2 != str3");   
  }
}
}

学习需要安静。。海盗要重新来过。。
2008-04-06 10:56
he20041987
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2007-9-10
收藏
得分:0 
在不理解在编写程序时,如果有错误自己都找不出来。
2008-04-06 10:57
he20041987
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2007-9-10
收藏
得分:0 
String真的是太难理解了。现在感觉StringBuffer都比这简单了。
2008-04-06 10:59
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
这个记住就好了..其它的不用记了...不要看的太神秘..理解成java在自己概念下产生的数据类型...

学习需要安静。。海盗要重新来过。。
2008-04-06 11:05
he20041987
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2007-9-10
收藏
得分:0 
谢谢指教! 看来是要多记些概念了。
2008-04-06 11:14
快速回复:String类问题?求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053731 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved