| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 608 人关注过本帖
标题:字符串的问题
只看楼主 加入收藏
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:9 
字符串的问题

String str = "abc";  和 String str1 = new String("abc");的区别



不要告诉我第二个要用到构造函数,这个我知道,还有木有其他的区别
搜索更多相关主题的帖子: 字符串 
2013-11-30 09:04
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
求助啊

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-11-30 09:29
仁道远
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2013-11-2
收藏
得分:5 
str有一个对象"abc";
str1有两个对象“new”和“abc”;
2013-11-30 10:16
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:15 
  比如说我们先有  String str = "abc";  再有一个  String str1 = "abc";  
第一句之后堆内存之后会存在 "abc", 而紧接着第二句的 str1 会指向堆内存中与 str 一样的"abc";这是为了节省内存

现在再来一句  String str2 = new String("abc");  
因为有 new 的出现,所以会 new 出一块新空间来存放"abc",和前两条语句的"abc"不是同一个指向。

再运行下面的程序看看:
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
System.out.println(str == str1);
结果是:
false
true
true

三十年河东,三十年河西,莫欺少年穷!
2013-11-30 11:07
张永亮
Rank: 2
等 级:论坛游民
帖 子:2
专家分:20
注 册:2011-12-25
收藏
得分:20 
String str1="abc";
String str2="abc";
String str3=new String("abc");
System.out.print(str1==str2);
System.out.print(str1==str3);
str1==str2的判断将将返回true,str1创建字符串常量“str1”,java 虚拟机会检测字符串池是否包含该字符串,如果不包含,则创建,然后返回。str2也赋值“abc”,这是字符串池村子该字符,所以不再创建,直接返回该字符,两个变量引用同一一个字符串,他们的内存地址相同,所以str1==str2,但是使用new关键字创建字符串时会开辟新的空间,所以str1==str3不成立,现在你应该明白
String str1="abc";
String str3=new String("abc");
为什么不同了吧!
2013-11-30 11:08
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
以下是引用仁道远在2013-11-30 10:16:43的发言:

str有一个对象"abc";
str1有两个对象“new”和“abc”;


什么意思???????????????

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-11-30 22:28
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
以下是引用韶志在2013-11-30 11:07:57的发言:

  比如说我们先有  String str = "abc";  再有一个  String str1 = "abc";  
第一句之后堆内存之后会存在 "abc", 而紧接着第二句的 str1 会指向堆内存中与 str 一样的"abc";这是为了节省内存

现在再来一句  String str2 = new String("abc");  
因为有 new 的出现,所以会 new 出一块新空间来存放"abc",和前两条语句的"abc"不是同一个指向。

再运行下面的程序看看:
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
System.out.println(str == str1);
结果是:
false
true
true



话说第一个不是存在常量池里吗?????????

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-11-30 22:29
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
以下是引用张永亮在2013-11-30 11:08:54的发言:

String str1="abc";
String str2="abc";
String str3=new String("abc");
System.out.print(str1==str2);
System.out.print(str1==str3);
str1==str2的判断将将返回true,str1创建字符串常量“str1”,java 虚拟机会检测字符串池是否包含该字符串,如果不包含,则创建,然后返回。str2也赋值“abc”,这是字符串池村子该字符,所以不再创建,直接返回该字符,两个变量引用同一一个字符串,他们的内存地址相同,所以str1==str2,但是使用new关键字创建字符串时会开辟新的空间,所以str1==str3不成立,现在你应该明白
String str1="abc";
String str3=new String("abc");
为什么不同了吧!



O(∩_∩)O谢谢,但是为什么说第二个产生两个对象呢???????????

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-11-30 22:31
唐寒枫
Rank: 1
等 级:新手上路
威 望:1
帖 子:5
专家分:0
注 册:2013-11-4
收藏
得分:0 
创建字符串有两种方式:
1、利用双引号。这样是在string pool里面创建字符串对象  eg:String str = "abc";
2、利用 new String(); 构造创建,开辟新的空间存放String的副本  eg:String str1= new String("abc");

利用 new String()创建的话,即使从表面看起来里面存放的字符串是一样的,但是它们在内存里面所在的位置是不一样的,如果利用“==”进行判断,返回只是 false,但是用equals进行判断,返回值就是true,注意equals和== 的区别,前者判断的是内容,后者判断的是内存地址。举个例子:
程序代码:
        String str1="abc";
        String str2=new String("abc");
        String str3=str2;
        if(str1==str2){//第一个if语句
            System.out.println("true");
        }else {
            System.out.println("false");
        }
       

        if(str2==str3){//第二个if语句
            System.out.println("true");
        }else {
            System.out.println("false");
        }
       

        if(str1.equals(str2)){////第三个if语句。str1和str2进行内容的比较是一样的,返回true
            System.out.println("true");
        }else {
            System.out.println("false");
        }
    }

结果是:
false
true
true

很显然,虽然str1、str2、str3里面的字符串都是“abc”,但是str1和str2进行“==”比较是false,因为str1是利用双等号创建,
str2是利用new String()创建,所在内存的位置不一样。但是进行“==”比较时二者是一样的(参见第三个if语句)

希望可以帮到你
2013-12-08 19:13
chendh
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-11-17
收藏
得分:0 
2013-12-08 19:56
快速回复:字符串的问题
数据加载中...
 
   



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

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