java 源码之String类


             Java语言中有八种基本数据类型:字节(byte)、字符(char)、短整型(short)、整型(int)、长整型(long)、浮点型(float)、双精度浮点型(double)和布尔型(boolean)。每种基本数据类型都有对应的封装类型,但是在编程中使用的最多的并不是这八种基本数据类型或其封装类型,而是字符串类型(String)。


              String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。String类的声明如下:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence

            可见String类实现了Serializable接口,所以它是可以被序列化到硬盘中,并实现了Comparable,所以String类有默认的排序规则的。


           /** The value is used for character storage. */
          private final char value[];         //由此可见String类其实是以char数组的形式存储的

           /** The offset is the first index of the storage that is used. */
          private final int offset;              //开始位置

           /** The count is the number of characters in the String. */
          private final int count;              //字条数目,即字符串的长度

           /** Cache the hash code for the string */
          private int hash; // Default to 0   //缓存的hash值


          获取String类的长度

、      public int length() {

                    return count;     //String的成员属性count即为字符串的长度,所以直接返回即可。

          }

           ==比较的是两个对象在内存中的地址值是否相等,而例子中是new了两个对象,所以第一个打印的是false,Java中所有的类都继承自Object类,Object类的equals方法比较的也是两个对象的地址值是否相等,但String类重写了equals方法,它比较的是两个字符串的内容是否相等,所以第二个打印的是true。

public boolean equals(Object anObject) {
 if (this == anObject) {
     return true;
 }
 if (anObject instanceof String) {
     String anotherString = (String)anObject;
     int n = count;
     if (n == anotherString.count) {
  char v1[] = value;
  char v2[] = anotherString.value;
  int i = offset;
  int j = anotherString.offset;
  while (n-- != 0) {
      if (v1[i++] != v2[j++])
   return false;
  }
  return true;
     }
 }
 return false;
    }


就先写到这,以后在补充吧。   刚刚开始写博客,写的很不到位,欢迎大家来吐槽,未完待续。。。。。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值