戚权20200928
知识点:
1.字符序列
-
String
字符串 -
StringBuffer
字符串缓冲区,是线程安全的 -
StringBuilder
字符串构造器,非线程安全的 -
CharBuffer
字符缓冲区都实现了CharSequence接口
2. String
2.1字符串声明
String str = "云创动力";//字面量 比较实用
String str = new String("云创动力");//字符串对像
2.2String类
-
public final class String 是用
final
修饰的类,在 Java 中用final
修饰的类不能被继承,也就是说String
没有子类。 -
在 Java 中,关键字
final
表示最终的。可以用来修饰类、方法、变量。-
被 final 修饰的类,不能被继承
-
被 final 修饰的方法,不能被重写
-
被 final 修饰的变量,不能变。如果是基本数据类型不能重新赋值,如果是引用数据类型不能改变引用。
-
-
无论哪个版本,value属性都是final的。就说明,字符串一点声明就不可变。所以字符串拥有不可变性。
2.3实例方法
方法名 | 返回值 | 描述 |
---|---|---|
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(StringanotherString) | boolean | 比较字符串,忽略大小写 |
hashCode() | int | 返回此字符串的哈希码 |
indexOf(String str) | int | 返回指定字符第一次出现的字符串内的索引 |
indexOf(String str, int fromIndex) | int | 返回指定子字符串的最后一次出现的字符串中的索引,从 指定索引开始向后搜索 |
length() | int | String |
replace(char oldChar, char newChar) | String | 返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar |
split(String regex) | String[] | 将此字符串分割为给定的 regular expression的匹配.使用特殊字符时需要转义 |
substring(int beginIndex) | String | 从指定索引开始(包括)到指定索引结束(不包括) |
toLowerCase() | String | 转换小写 |
toUpperCase() | String | 转换大写 |
trim() | String | 去掉首尾空格 |
toString() | String | 返回字符串 |
2.4字符串判断相等
-
字符串是引用数据类型,所以使用equals方法进行比较
-
equals 比较两个字符串是否相等(判断字符串内容)
-
判断 ' == ' 是否相等,如果相等返回 true
-
判断是否为 null,如果为 null 返回 false
-
字符串长度是否一样,不一样就返回false
-
依次比较每一位字符是否相等
-
-
如果是一个字面量和变量equals,一定要这样写.
- ##### " ".equals(str); // 可以避免 NullPointerException
-
equalsIgnoreCase 忽略大小写进行equals判断
3. Object
3.1Object
-
Object 类是所以有类的父类。在 java 中,所有的类都直接或间接的继承了 java.lang.Object 类。在定义一个类时,如果没有 extends 其他类,那么这个类就是直接继承自 Object 类。
-
常用的方法:
- getClass() Class<? > 返回 Class 的对象
- wait() void 导致当前线程等待
- wait(long timeout) void 导致当前线程等待
- notify() void 唤醒线程
- notifyAll() void 唤醒所有线程
- finalize() void 当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象
- clone() Object 创建并返回此对象的副本
- toString() Sring 返回对象的字符串表示形式
- equals() boolean 两个对象是否相同
- hashCode() int 返回对象的哈希码值
3.2重写toString()
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", gender=" + gender + ", hobby=" + hobby + "]";
}
3.3重写equals()和hashCode()
-
因为 equals 和 hashCode 之间是有关系的,所以一般要同时重写这两个方法。
-
如果 hashCode 值相等, equals 不一定相等
-
如果 hashCode 值不相等, equals 一定不相等
-
如果 equals 为 true , hashCode 一定相等
-
如果 equals 为 false , hashCode 不一定相等
-
3.4重写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 。
3.5instanceof
instanceof 表示一个变量所指向的对象是否是指定类型。 instanceof 在使用时,参与运算的对象和类,必须是继承关系。否则会产生错误。
3.6重写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;
}
4.包装类
4.1包装类的使用
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);//int 的最大值
System.out.println(Integer.MIN_VALUE);// int的最小值
int a = 100 ,b = 102; System.out.println(Integer.compare(a, b));// -1
System.out.println(Integer.max(a, b)); //102
System.out.println(Integer.min(a, b)); //100
System.out.println(Integer.sum(a, b));//202
}
4.2基本数据类型转String
- 使用 String.valueOf() 方法进行转换
- "" + 基本数据类型
int i = 10;
String s = String.valueOf(i);
byte b = 11;
String s1 = String.valueOf(b);
short sh = 12;
String s2 = String.valueOf(s);
long l = 13L;
String s3 = String.valueOf(l);
boolean f = false;
String s4 = String.valueOf(f);
char c = 'a';
String s5 = String.valueOf(c);
float f1 = 0.15F;
String s6 = String.valueOf(f1);
double d = 3.14D;
String s7 = String.valueOf(d);
4.3拆箱/装箱
-
拆箱是指将包装类型转换成其基本数据类型
-
拆箱:拆箱操作(包装类转换到基本数据类型)调用的是 包装类对象.xxxxValue()
-
在 java 中基本数据类型与其包装类是自动进行类型转换的,称为自动拆箱/自动装箱
-
Integer i = 10; //装箱 int a = i; // 拆箱
-
-
-
装箱是指将基本数据类型转换成其包装类
- 装箱操作(基本数据类型转到包装类)调用的是 包装类.valueOf()
- 对于Float和Double类型会进行 NaN(not a number) 判断,如果是 NaN 就会准换成一个相对应的NaN 引用
- 如果包装类的值是整数类型范围在 -128 ~ 127 或者布尔类型的 true 或者 false 以及字符文字在\u0000 和 \u007f 范围中的话, java 会直接从缓存中取值。如果超出了这个范围会 new
- 装箱操作(基本数据类型转到包装类)调用的是 包装类.valueOf()
总结
今天主要学习了String,收获颇多,难度也很大,尤其是String在JVM内的结存解析,晚上研究了一晚上,感觉还是有一点点没有整明白。然后就是感觉Java的很多东西不像前端只管记忆就是了,java很多需要理解,知道如何这样的。感觉整懂了还是很开心的。
点赞
评论