标签:线程安全 返回值 平台 实现 包装 ref code 类型 begin
了 java 中的8种基本数据类型。其中, char 是字符类型,占2个字节16位,默认值 是 ‘\u0000‘ 。用 char 类型的变量来表示单个字符,用单引号引起来。
多个字符按照一定的顺序组成的列表就叫作字符序列
String 字符串
StringBuffer 字符串缓冲区,是线程安全的
StringBuilder 字符串构造器,非线程安全的
CharBuffer 字符缓冲区
都实现了 CharSequence 接口
字符串 java.lang.String 可以用来表示多个字符,用 "" 引起来。字符串是引用数据类型,默认值是 null 。
String str = "云创动力"; //字面量 比较常用
String str1 = new 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 | 返回字符串 |
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中都 是对象地址的引用。所以我们大多数情况下需要重写这三个方法。
因为 equals 和 hashCode 之间是有关系的,所以一般要同时重写这两个方法。
规则:
①如果 hashCode 值相等, equals 不一定相等
②如果 hashCode 值不相等, equals 一定不相等
③如果 equals 为 true , hashCode 一定相等
④如果 equals 为 false , hashCode 不一定相等
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 在使用时,参与运算的对象和 类,必须是继承关系。否则会产生错误。
重写 hashCode 要注意,同一个对象多次调用 hashCode() 返回值一定是一致的
一般使用软件自动生成
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 |
String.valueOf() 将基本数据类型装换为字符串类型
包装类.parse...(String str) 将字符窜转为基本数据类型
注意:被转换的字符串必须是可以转换成基本数据类型的字符串,否则会产生 java.lang.NumberFormatException 异常
拆箱是指将包装类型转换成其基本数据类型
装箱是指将基本数据类型转换成其包装类型
装箱操作(基本数据类型转到包装类)调用的是 包装类.valueOf()
对于Float和Double类型会进行 NaN(not a number) 判断,如果是 NaN 就会准换成一个相对应的 NaN 引用
如果包装类的值是整数类型范围在 -128 ~ 127 或者布尔类型的 true 或者 false 以及字符文字在 \u0000 和 \u007f 范围中的话, java 会直接从缓存中取值。如果超出了这个范围会 new
拆箱操作(包装类转换到基本数据类型)调用的是 包装类对象.xxxxValue()
在 java 中基本数据类型与其包装类是自动进行类型转换的,称为自动拆箱/自动装箱
标签:线程安全 返回值 平台 实现 包装 ref code 类型 begin
原文地址:https://www.cnblogs.com/changge-w/p/13780286.html