String构造方法的问题

wbo112 2014-03-22 06:47:20
看String源码,发现它的构造方法
    public String(String original) {
int size = original.count;
char[] originalValue = original.value;

发现string内部是用char[]来实现的,
不过不太明白 original.count 这个是如何得到string的长度的,这个count是String的属性,通过这句是怎么得到字符串长度的呢,original.value又是如何转成数组的。
...全文
399 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lliiqiang 2014-06-26
  • 打赏
  • 举报
回复
count存储的是字符串的真实长度。
低调Di程序猿 2014-06-25
  • 打赏
  • 举报
回复
和9楼说的原理类似啊
yuhouqingchen_2648 2014-06-25
  • 打赏
  • 举报
回复
引用 13 楼 gaofuqi 的回复:
[quote=引用 11 楼 u011461314 的回复:] 明白了 String就没有玩头了. 字面量"www", 就是String www. 基本数据类型才有玩头 int Integer 是不一样的。
        int a = 4;
        Integer b = new Integer(4);
        
        String c = "dddd";
        String d = new String("ddd");
还是有不同的,字面量"www"是在Java虚拟机的常量池中的,如果是new String("www"),字符串"www"是在Java堆里面的。 基本类型和引用类型本来就是不一样的。[/quote] String str = new String("www"); 这个www是在常量池中的
gaofuqi 2014-03-24
  • 打赏
  • 举报
回复
引用 14 楼 wbo112 的回复:
我的意思就是比如楼上的 String c = "dddd"; c.count的值是“dddd”传递过来的. 这个里面常量池中"dddd" 它的.count的值是从哪里来的呀,
常量池中字符串的也是对象,这是由Java虚拟机在加载类的时候创建的。可以看一下Oracle的官方文档: http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.htm 上面的链接对字面量的结构有详细的介绍,在3.10.5. String Literals 这章节介绍了字符串字面量。

A string literal is a reference to an instance of class String (§4.3.1, §4.3.3). 
login_21 2014-03-23
  • 打赏
  • 举报
回复
大神们好,顶一个
zhjdg 2014-03-23
  • 打赏
  • 举报
回复
http://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#4.3.3 String literals (§3.10.5) are references to instances of class String.
wbo112 2014-03-23
  • 打赏
  • 举报
回复
我的意思就是比如楼上的 String c = "dddd"; c.count的值是“dddd”传递过来的. 这个里面常量池中"dddd" 它的.count的值是从哪里来的呀,
gaofuqi 2014-03-22
  • 打赏
  • 举报
回复
引用 11 楼 u011461314 的回复:
明白了 String就没有玩头了. 字面量"www", 就是String www. 基本数据类型才有玩头 int Integer 是不一样的。
        int a = 4;
        Integer b = new Integer(4);
        
        String c = "dddd";
        String d = new String("ddd");
还是有不同的,字面量"www"是在Java虚拟机的常量池中的,如果是new String("www"),字符串"www"是在Java堆里面的。 基本类型和引用类型本来就是不一样的。
zhjdg 2014-03-22
  • 打赏
  • 举报
回复
原来java 中也有不是对象的东西。
zhjdg 2014-03-22
  • 打赏
  • 举报
回复
明白了 String就没有玩头了. 字面量"www", 就是String www. 基本数据类型才有玩头 int Integer 是不一样的。
        int a = 4;
        Integer b = new Integer(4);
        
        String c = "dddd";
        String d = new String("ddd");
gaofuqi 2014-03-22
  • 打赏
  • 举报
回复
引用 7 楼 u011461314 的回复:
我不明白original.count 怎么可以取到个私有变量的值。
引用 7 楼 u011461314 的回复:
我不明白original.count 怎么可以取到个私有变量的值。
那是因为在同一个类里。
zhjdg 2014-03-22
  • 打赏
  • 举报
回复
一个是6 一个是7 original.count original是另外一个String 不知从那个地方冒出来的。 原来是可以取的
public class Test4 {
    private int num;
    public int c;
    public Test4(Test4 o){
        this.c = o.num;
    }
    public Test4(){
        num = 6;
    }
}
  Test4 b = new Test4();
        Test4 f = new Test4(b);
QQ2472322319 2014-03-22
  • 打赏
  • 举报
回复

不想多说 看或不看源码就在那里 不知道这问题 有什么意义 居然那么多人回答
zhjdg 2014-03-22
  • 打赏
  • 举报
回复
我不明白original.count 怎么可以取到个私有变量的值。
代码间的舞者 2014-03-22
  • 打赏
  • 举报
回复
楼主,既然要研究String的构造函数,就请把String类的代码看全。这样你肯定能找到你想要的答案的。
gaofuqi 2014-03-22
  • 打赏
  • 举报
回复
引用 4 楼 wbo112 的回复:
[quote=引用 3 楼 u012724379 的回复:] [quote=引用 2 楼 wbo112 的回复:] [quote=引用 1 楼 wangxf_8341 的回复:] 只见树木,不见森林啊,

private final char                     value[];
    private final int                      offset;
    private final int                      count;
    private int                            hash;
既然是String的属性,又是在当前类里面,就可以直接用了
是可以这样用,不过默认值value[]不应该是null吗,count 不应该是0吗;original.count; original.value;两个值是怎么得到的呀[/quote] 参数传递[/quote]不太懂,能说的明白点吗,[/quote] 两个不同的String对象,楼主说的value[]和count是入参的original的属性而不是将要创建的String对象的属性,original已经创建了original就已经完成初始化并且已经赋值。
wbo112 2014-03-22
  • 打赏
  • 举报
回复
引用 3 楼 u012724379 的回复:
[quote=引用 2 楼 wbo112 的回复:] [quote=引用 1 楼 wangxf_8341 的回复:] 只见树木,不见森林啊,

private final char                     value[];
    private final int                      offset;
    private final int                      count;
    private int                            hash;
既然是String的属性,又是在当前类里面,就可以直接用了
是可以这样用,不过默认值value[]不应该是null吗,count 不应该是0吗;original.count; original.value;两个值是怎么得到的呀[/quote] 参数传递[/quote]不太懂,能说的明白点吗,
-江沐风- 2014-03-22
  • 打赏
  • 举报
回复
引用 2 楼 wbo112 的回复:
[quote=引用 1 楼 wangxf_8341 的回复:] 只见树木,不见森林啊,

private final char                     value[];
    private final int                      offset;
    private final int                      count;
    private int                            hash;
既然是String的属性,又是在当前类里面,就可以直接用了
是可以这样用,不过默认值value[]不应该是null吗,count 不应该是0吗;original.count; original.value;两个值是怎么得到的呀[/quote] 参数传递
wbo112 2014-03-22
  • 打赏
  • 举报
回复
引用 1 楼 wangxf_8341 的回复:
只见树木,不见森林啊,

private final char                     value[];
    private final int                      offset;
    private final int                      count;
    private int                            hash;
既然是String的属性,又是在当前类里面,就可以直接用了
是可以这样用,不过默认值value[]不应该是null吗,count 不应该是0吗;original.count; original.value;两个值是怎么得到的呀
淡定的峰哥 2014-03-22
  • 打赏
  • 举报
回复
只见树木,不见森林啊,

private final char                     value[];
    private final int                      offset;
    private final int                      count;
    private int                            hash;
既然是String的属性,又是在当前类里面,就可以直接用了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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