| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 507 人关注过本帖
标题:关于String 内存
只看楼主 加入收藏
小牛
Rank: 1
等 级:新手上路
威 望:1
帖 子:434
专家分:8
注 册:2006-10-1
结帖率:81.48%
收藏
已结贴  问题点数:10 回复次数:7 
关于String 内存
String a=new String("good man");
当程序运行运行时,在加载代码时“good man”会加载在常量池中,
在这个构造函数中,会在内存中,会开辟一个字符串数组Values并且将
这个常量中的每个字符值赋给这个字符串数组,然后把Values的赋给a.
这样的理解对吗?

String a="good man";是直接把这个常量地坦赋给a.
搜索更多相关主题的帖子: Values 字符串 
2015-05-30 00:02
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:4 
两种方法应该都会做拷贝构造,我觉得应该直接用指针指向这块内存比较好

一片落叶掉进了回忆的流年。
2015-05-30 22:40
小牛
Rank: 1
等 级:新手上路
威 望:1
帖 子:434
专家分:8
注 册:2006-10-1
收藏
得分:0 
第二种 没有拷贝吧。

本店经营各类国际品牌运动鞋,板鞋,休闲鞋,有李宁,nike,匹克,阿迪达斯。
2015-05-31 06:43
日知己所无
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:38
帖 子:427
专家分:2071
注 册:2014-3-22
收藏
得分:4 
第二种没有拷贝,直接指向常量池里的地址,用==和equals判断的结果一样。

例如:
程序代码:
public class StringTest {
    public static void main(String[] args) {
        String a1 = new String("good man");
        String a2 = "good man";

        String b1 = new String("good man");
        String b2 = "good man";

        System.out.println(a1 == b1);
        System.out.println(a2 == b2);
    }
}
2015-05-31 18:39
小牛
Rank: 1
等 级:新手上路
威 望:1
帖 子:434
专家分:8
注 册:2006-10-1
收藏
得分:0 
第一种,会把常量池中的的字符一个个复制给一个字符串数组,然后把这个字符串数组的引用赋给a,是这样理解的吧。第二种就是直接引用常量池。

本店经营各类国际品牌运动鞋,板鞋,休闲鞋,有李宁,nike,匹克,阿迪达斯。
2015-05-31 20:46
秦时的明月夜
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:13
帖 子:126
专家分:504
注 册:2013-3-12
收藏
得分:2 
图片附件: 游客没有浏览图片的权限,请 登录注册
程序代码:
public class StringTest {
    public static void main(String[] args) {
        String str1="abc";
        String str2="abc";
        String str3="ab"+"c";
        String str4=new String(str2);
        System.out.println(str1==str2);
        System.out.println(str2==str3);
        System.out.println(str1==str4);
    }
}

//true
//true
//false
//true

str1 str2,str3 都是指向常量池的“abc”,str4显示赋值是new了一个对象所以要重新开辟一个空间了……所以引用的不一样
2015-06-01 15:15
小牛
Rank: 1
等 级:新手上路
威 望:1
帖 子:434
专家分:8
注 册:2006-10-1
收藏
得分:0 
有点不理解 , System.out.println(str2==str3);也为true.大神指点。

本店经营各类国际品牌运动鞋,板鞋,休闲鞋,有李宁,nike,匹克,阿迪达斯。
2015-06-06 07:44
快速回复:关于String 内存
数据加载中...
 
   



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

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