1.String类

1.1字符列表

 java 定义了8种基本数据类型。其中, char 是字符类型,占2个字节16位,默认值 是 '\u0000' 。用 char 类型的变量来表示单个字符,用单引号引起来。

多个字符按照一定的顺序组成的列表就叫作字符序列

其他字符序列:

String 字符串

StringBuffer 字符串缓冲区,是线程安全的

StringBuilder 字符串构造器,非线程安全的

CharBuffer 字符缓冲区

都实现了 CharSequence 接口

1.2 String类

字符串声明

字符串 java.lang.String 可以用来表示多个字符,用 "" 引起来。字符串是引用数据类型,默认值是 null 。

String str = "云创动力"; //字面量 比较常用

String str1 = new String("云创动力"); //字符串对象

String类属性

public final class String 是用 final 修饰的类,在 Java 中用 final 修饰的类不能被继承,也就 是说 String 没有子类。

jdk 1.8及之前版本:

private final char value[]; //用于存放内容,字符串底层其实就是一个字符数组 

private int hash; //用来存放hash值

jdk1.9及以后版本:

private final byte value[]; //用于存放内容,1.9之后使用字节数组存储 

private int hash; //用来存放hash值 

private byte coder; //编码方式,0 -LATIN1,1 - UTF-16

我们发现,不管是 jdk 8 及以前还是 jdk 9 及以后版本, value 属性都是 final 的。就说明,字符 串一旦声明就不可变。所以字符串拥有不可变性。

常用方法

构造方法

方法名

描述

String()

初始化新创建的 String 对象,使其表示空字符序列

String(byte[] bytes)

通过使用平台的默认字符集解码指定的字节数组来构造新的 String

String(byte[] bytes, Charset charset)

构造一个新的 String 由指定用指定的字节的数组解码charset

String(String original)

初始化新创建的 String 对象,使其表示与参数相同的字符序列; 换 句话说,新创建的字符串是参数字符串的副本

String(StringBuffer buffer)

分配一个新的字符串,其中包含当前包含在字符串缓冲区参数中的 字符序列

String(StringBuilder builder)

分配一个新的字符串,其中包含当前包含在字符串构建器参数中的 字符序列

实例方法

方法名

返回值

描述

charAt(int index)

char

返回指定索引处的字符

codePointAt(int index)

int

返回指定索引处的字符(Unicode代码点)。

compareTo(String anotherString)

int

按字典顺序比较两个字符串

compareToIgnoreCase(String str)

int

按字典顺序比较两个字符串,忽略大小写

concat(String str)

String

将指定的字符串连接到该字符串的末尾

contains(CharSequence s)

boolean

当且仅当此字符串包含指定的s值序列时才返回true

endsWith(String suffix)

boolean

测试此字符串是否以指定的后缀结尾

startsWith(String prefix)

boolean

测试此字符串是否以指定的前缀开头

equals(Object anObject)

boolean

比较字符串

equalsIgnoreCase(String anotherString)

boolean

比较字符串,忽略大小写

getBytes()

byte[]

使用平台的默认字符集将此 String编码为字节序列,将 结果存储到新的字节数组中。

getBytes(Charset charset)

byte[]

使用给定的charset将该String编码为字节序列,将结果 存储到新的字节数组中。

hashCode()

int

返回此字符串的哈希码

indexOf(String str)

int

返回指定字符第一次出现的字符串内的索引

indexOf(String str, int fromIndex)

int

返回指定子串的第一次出现的字符串中的索引,从指定的 索引开始

isEmpty()

boolean

判断字符串是否是空串

lastIndexOf(String str)

int

返回指定子字符串最后一次出现的字符串中的索引

lastIndexOf(String str, int fromIndex)

int

返回指定子字符串的最后一次出现的字符串中的索引,从 指定索引开始向后搜索

length()

int

返回此字符串的长度

replace(char oldChar, char newChar)

String

返回从替换所有出现的导致一个字符串 oldChar在此字符 串 newChar

split(String regex)

String[]

sion的匹配.使用 特殊字符时需要转义

substring(int beginIndex)

String

从指定索引开始(包括)截取字符串并返回

substring(int beginIndex, int endIndex)

String

从指定索引开始(包括)到指定索引结束(不包括)

toLowerCase()

String

转换小写

toUpperCase()

String

转换大写

trim()

String

去掉首尾空格

toString()

String

返回字符串

2.Object类

Object 类是所以有类的父类。在 java 中,所有的类都直接或间接的继承了 java.lang.Object 类。 在定义一个类时,如果没有 extends 其他类,那么这个类就是直接继承自 Object 类。

方法名

返回值

描述

getClass()

Class<?>

返回Class的对象

toString()

String

返回对象的字符串表达形式

equals()

boolean

两个对象是否相同

hashCode()

int

返回对象的哈希码值

native 是用户和本地(c/c++)代码进行交互的API,调用c/c++程序的。

很多情况下, toString() / equals() / hashCode() 方法是不满足咱们需求的,因为Object中都 是对象地址的引用。所以我们大多数情况下需要重写这三个方法。

2.1重写toString()

2.2重写equals()和hashCode()

因为 equals 和 hashCode 之间是有关系的,所以一般要同时重写这两个方法。

规则:

①如果 hashCode 值相等, equals 不一定相等

②如果 hashCode 值不相等, equals 一定不相等

③如果 equals 为 true , hashCode 一定相等

④如果 equals 为 false , hashCode 不一定相等

2.3重写equals

equals() 是判断两个对象是否相等的方法,它有一下规则:

自反性 :对于任何非空的对象 x , x.equals(x) 应该返回 true 。

对称性:对于任何非空引用值 x 和 y , x.equals(y) 应该返回 true 当且仅当 y.equals(x) 返 回 true 。

传递性 :对于任何非空引用值 x , y 和 z ,如果 x.equals(y) 返回 true , y.equals(z) 返 回 true ,然后 x.equals(z) 应该返回 true 。

一致性 :对于任何非空引用值 x 和 y ,多次调用 x.equals(y) 始终返回 true 或始终返回 false ,当 equals 比较的对象未被修改时。

对于任何非空的参考值 x , x.equals(null) 应该返回 false 。

注意:instanceof 表示一个变量所指向的对象是否是指定类型。 instanceof 在使用时,参与运算的对象和 类,必须是继承关系。否则会产生错误。

2.4重写hashCode()

重写 hashCode 要注意,同一个对象多次调用 hashCode() 返回值一定是一致的

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + age;
    result = prime * result + ((gender == null) ? 0 : gender.hashCode());
    result = prime * result + ((hobby == null) ? 0 : hobby.hashCode());
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
}

一般使用软件自动生成

3.包装类

java 中有8种基本数据类型,分别是: byte short int long boolean char float double 其他的都是引用数据类型,包括 jdk API 中的类和我们自定义的类都是引用数据类型

java 为了方便基本数据类型的操作,为每一个基本数据类型都写了一个包装类。这个包装类是引用数 据类型。

基本数据类型

包装类

int

java.lang.Integer

short

java.lang.Short

byte

java.lang.Byte

long

java.lang.Long

boolean

java.lang.Boolean

char

java.lang.Character

float

java.lang.Float

double

java.lang.Double

3.1基本数据类型与String相互转换

String.valueOf() 将基本数据类型装换为字符串类型

包装类.parse...(String str) 将字符窜转为基本数据类型

注意:被转换的字符串必须是可以转换成基本数据类型的字符串,否则会产生 java.lang.NumberFormatException 异常

3.2拆箱和装箱

拆箱是指将包装类型转换成其基本数据类型

装箱是指将基本数据类型转换成其包装类型

装箱

装箱操作(基本数据类型转到包装类)调用的是 包装类.valueOf()

对于Float和Double类型会进行 NaN(not a number) 判断,如果是 NaN 就会准换成一个相对应的 NaN 引用

如果包装类的值是整数类型范围在 -128 ~ 127 或者布尔类型的 true 或者 false 以及字符文字在 \u0000 和 \u007f 范围中的话, java 会直接从缓存中取值。如果超出了这个范围会 new

拆箱

拆箱操作(包装类转换到基本数据类型)调用的是 包装类对象.xxxxValue()

自动装箱或拆箱

在 java 中基本数据类型与其包装类是自动进行类型转换的,称为自动拆箱/自动装箱