JAVA源码学习--String

本文探讨了Java中String类的创建方式,包括堆栈区别,并详细分析了String的构造方法和成员变量。通过源码学习,解释了`hash`字段的含义以及`hashCode()`方法的作用。同时,对比了Object类中的`equals()`和`hashCode()`方法,揭示了String类如何重写这些方法以实现特定的行为。最后,提到了Java对象创建时对于基本类型和String在常量池中的处理方式。
摘要由CSDN通过智能技术生成

最近发四重新学习java的基础,从基本类型以及里面的各种方法开始看起,看的一本书《JAVA核心技术卷1,基础知识》,这是第十版,讲的JDK8的一些特性。
我在想我们创建对象的时候都是这样进行创建的

People p = new People();
Integer i = new Integer();

但是String 和基本类型可以这么写

int i = 1;
String s = "ssss";//这种写法,不是新创建的对象是在常量池中存放了一个ssss的字符串,在栈里面,如果没有引用则消失

String 还可以这么写

String s = new String();//新建了一个String的对象,这个是创建了一个新的String的对象,在堆里面,不用的时候由垃圾回收器进行回收

这里需要注意堆和栈的区别

看到String源码里面有了个这个方法:

  public String(String original) {
        this.value = original.value;
        this.hash = original.hash;
    }

这个构造方法作用是什么?构造方法传进来的参数的类型是他自己?
发现String这个类中有两个成员变量

 private final char value[];
    /** Cache the hash code for the string */
    private int hash; // Default to 0

其中第二个hash他描述的是hash值,表示的是什么意思?
下面是相应的方法

  /**
     * Returns a hash code for this string. The hash code for a
     * <code>String</code> object is computed as
     * <blockquote><pre>
     * s[0]*31^(n-
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值