String类:品读API

String 类用的比较多,是笔试题,面试题喜欢的考点,本文就以一个经典的面试题开篇。

面试官:

String str = new String("abc");
创建了几个对象?

答:吓死宝宝了,宝宝没怎么见过这样的啊。让我一一道来。

首先声明,String类跟其他类一样,是个普通的类,不是八大基本数据类型(boolean, byte, short, char, int, float, double, long)中的一种。然而,String又是一种不普通的类。它可以这样去建立对象,

String str = "abc";
String 类位于java.lang包下,是Object的直接子类,实现了Serializable(序列化),Comparable<String>(比较性),CharSequence(字符序列)等接口。Java中所有字符串都是String类的实例。字符串是常量,一旦创建不可改变,故该类声明为final。

该类重载了构造函数,达十几个。

String()
空参构造函数。

String(byte[] bytes)
通过用平台默认编码集解码特定byte数组来构造字符串。

String(byte[] bytes, Charset charset)
指定编码集。

String(byte[] bytes, int offset, int length)
通过用平台默认编码集解码byte数组,起始位置为offset,字符串长度为length。

String(byte[] bytes, int offset, int length, Charset charset)
指定编码集。

String(byte[] bytes, int offset, int length, String charsetName)
跟上面的略有不同,上面是调用Charset类指定编码集,这个是用String类。

String(byte[] bytes, String charsetName)
String(char[] value)
这个构造方法更常用一些。将char数组转化成字符串。

String(char[] value, int offset, int count)
count貌似跟length没什么区别。

String(int[] codePoints, int offset, int count)
建立一个包含Unicode字符编码的数组的字符串,注意此数组为int[ ]型。
String(String original)
这个就是我们讨论的那个问题。

String(StringBuffer buffer)
String(StringBuilder builder)
StringBuffer和StringBuilder是容器,可认为是可变长度的字符串,不同的是,StringBuffer线程安全,StringBuilder非线程安全。

当然,还有几个废弃,不推荐的构造函数,就不予介绍了。

普通方法

char charAt(int index)
返回在特定索引位置的字符。
int codePointAt(int index)
int codePointBefore(int index)
int codePointCount(int beginIndex, int endIndex)
int compareTo(String abotherString)

重写了Comparable接口的compareTo()方法。以字典排序法进行比较,若调用对象排序在参数字符串后,则返回正数,若调用对象在参数之前,则返回负数,否则为0.

int compareToIgnoreCase(String str)
忽略大小写比较,不然的话以Ascii码比较,A在前,a在后。

String concat(String str)
连接两个字符串,在字符串对象的末尾加上参数字符串对象。

boolean contains(CharSequence s)
判断是否存在某个字符。

boolean contentEquals(CharSequence cs)
判断内容是否等于传入的字符序列。

boolean contentEquals(StringBuffer sb)
判断内容是否等于传入的StringBuffer对象。

static String copyValueOf(char[] data)

返回char数组的字符串表达式,功能与其中某个构造函数基本一致,不过此方法是静态方法,一般认为是工具方法。

static String copyValueOf(char[] data, int offset, int count)
boolean endsWith(String suffix)
判断对象是否以某字符串结尾。

boolean equals(Object anObject)
重写Object父类的equals()方法,判断对象是否与传入的字符串相等。

boolean equalsIgnoreCase(String anotherString)
忽略大小写比较,这就是我们在输入验证码时,输入大小写均可的原因。

static String format(Locale l, String format, Object... args)
static String format(String format, Object... args)
格式化,似乎并不常用。

byte[] getBytes()
用平台默认编码集编码这个字符串对象,使之变成一系列字节,并存储到byte数组中。
byte[] getBytes(Charset charset)
用指定编码集编码。
byte[] getBytes(String charsetName)
用字符串指定编码集。

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
从字符串对象里拷贝字符,srcBegin指字符串的起始位置,srcEnd指字符串的结束位置,char[] dst指目标char数组,dstBegin指数组起始位置。

int hashCode()
重写Object类的hashCode方法。
public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }
以上为hashCode()源码,hash一般为0.利用函数h = 31*h+val[i]得到hashCode。
/** Cache the hash code for the string */
    private int hash; // Default to 0
hash的定义。
public String(String original) {
        this.value = original.value;
        this.hash = original.hash;
    }
hash的构造方法初始化。
int indexOf(int ch)

返回字符串对象中出现该字符第一次的位置的索引,若查找不到,则返回-1。注意传入的是int型的,说明是以ASCii编码的。

int indexOf(int ch, int fromIndex)
从某一个位置(fromIndex)之后开始索引,但是返回的值仍是按照从0索引的。

int indexOf(String str)
返回子字符串第一次出现的索引。

int indexOf(String str, int fromIndex)
String intern()
返回字符串对象的规范表示,本地方法。
boolean isEmpty()
这只是将判断字符串长度是否为0,封装了起来。

int lastIndexOf(int ch)
int lastIndexOf(int ch, int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)
从后往前查找,但是返回的索引还是正常从前往后的索引。

int length()
不像数组那样,长度是一个属性,这里,长度是一个方法。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值