这个方法用于数组之间的元素拷贝。既支持两个不同数组之间的元素拷贝,也支持同一个数组内部的元素拷贝。
当是同一个数组内部的拷贝时,
srcPos(原数组下标) > destPos(目标数组下标):代表元素左移,通常用于删除元素
srcPos(原数组下标) < destPos(目标数组下标):代表元素右移,通常用于插入元素
因为arraycopy这个方法是JDK1.0就有的,当时还没有Arrays工具类。Arrays工具类是后来
(1)定义学生类Student,包含属性:学号id,姓名name,成绩score
(2)定义矩形类Rectangle,包含属性:长length,宽width
(3)定义商品类Goods,包含属性:编号id,名称name,价格price
(4)分别定义
* 学生对象数组,按照id升序排列
* 矩形对象数组,按照面积降序排列
* 商品对象数组,按照价格升序排列
Java官方提供了一个自然比较器接口:java.lang.Comparable接口,这个接口包含一个必须重写的抽象:int compareTo(Object obj),当某个类的对象需要比较大小或排序时,这个类就实现这个接口,重写这个抽象方法,在抽象方法中说明按照这个类的什么值进行比较大小或排序。
结论:如果要给对象数组排序,让对象的类实现Comparable接口,重写int compareTo(Object obj)方法即可,然后调用Arrays.sort方法排序。
当要比较大小或要排序的对象的类已经实现了Comparable接口,也重写了int compareTo(Object obj)方法,仍然不能满足新的比较大小或排序的需求,就要重新找另一个接口,java.util.Comparator,称为定制比较器接口,或者备胎,它也有一个抽象方法:int compare(Object o1, Object o2).这个接口,需要我们单独编写类来实现它。
如果某个类的对象要比较大小,或排序,
首先,考虑这个对象的类本身实现Comparable接口,重写int compareTo(Object obj)方法
其次,如果有更多的比较大小的规则要求,那么就要单独编写类,实现Comparator接口,重写int compare(Object o1, Object o2)
无论哪个,都可以使用Arrays.sort方法进行排序
Arrays.sort(数组) 说明依赖于 Comparable接口的 compareTo方法
Arrays.sort(数组, Comparator接口的实现类对象)说明依赖于 Comparator接口的compare方法
1、String是final修饰的类,没有子类
2、String类的对象本身是不可变,我们称为常量对象
包装类、第3代的日期时间类、String类等的对象也是不可变的。
String类的对象的值如果发生修改,会返回新对象。
String类的对象底层是如何存储这一组字符的?
* JDK9之前:String类的对象底层是用char[]来存储一组字符的
* JDK9(含)之后:String类的对象底层是用byte[]来存储一组字符的*因为程序中大多数字符串是不包含中文等字符,只有英文、数字0-9等第字符组成,二这些字符的编码在0-127之间,用byte[]数组存储可以节约一半的空间。
String类的哪些设计,保证了字符串对象不可变?
* 无论底层是char[]还是byte[],它们前面都有final修饰,意味着value的值不能修改。这里限制了value不能指向新数组,那么意味着value不能扩容,缩容等操作。
* value前面有private修饰,意味着在String的外面无法直接访问value数组,如果没有get/set的话,只能在String类的内部访问或操作value数组。所以在String的外面,我们无法直接修改value的元素值。
* 在String的所有方法中,凡是涉及到修改字符串的内容的方法,都会返回新对象。
字符串对象被设计为不可变,有什么好处?
可以共享字符串常量对象。
所有字符串对象都会被共享吗?
* 直接双引号引起来的字符串常量对象
* 调用intern()的结果得到字符串是可以共享的
* 两个""直接引起来的字符串对象的+拼接结果也是可以被共享
3.2.1 系列1
3.2.2 系列2
GBK 只支持中文字符和ASCii码范围内的字符
UTF-8 支持全世界所有国家的常见字符和ASCii码范围内的字符,文件,网络,数据库都支持
UTF-16 JVM内部使用
3.2.3 系列3
3.2.4 系列4
支持正则的方法:
* matches:判断字符串是否满足xx规则
* split:对字符串进行拆分
* replaceAll:替换满足正则的所有字符
* replaceFirst:替换满足正则的第一个字符正则表达式:是文本的规则的定义。