Java基础-源码:关于 jdk 部分类的源码解读

1. String 类

String类是final类,即是面试中经常被问到的不可变类。

(1) hashCode

String str = "abc"; 

String str2 = new String("abc");

以上两种方式的String对象的hashCode一致。方式二在方式一的基础上调用了String的构造函数,在构造函数中将hashCode再次赋值给str2.

(2) hashCode怎么计算的?

hashCode算法很简单,源码如下:

它本质是直接把字符串转换为字符数组,再用算法公式f(0) = val[0]; f(x) = 31*f(x)+val[i]; 计算而来。为什么要转换为字符数组,因为在assci字节表中,每个字符都代表一个数字,这个数字是这个字符在这长表中的序号(编号),这里默认单个字符和这个数字等价,所以char字符可以参与计算。因此hashCode就是int类型的数值。

(3) 方法

String.class中多数方法是重写的。常用的方法总结如下:

构造函数、length()、isEmpty(...)、getBytes(...)、startWith(...)、subStringOf(...)、indexOf(...)、lastIndexOf(...)、split(...)、toLowerCase(...)、toUpperCase(...)、valueOf(...)。

String.valueOf(...) 参数可以是double、float、long、int类型,内部其实调用的是这几个类型的包装类型的toString()方法,如果有人问,为什么没有xx类型的valueOf()方法,你可以回答可能因为它没有toString()方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值