1. 内存模型
1.1 对象缓存
public static void main(String[] args) { Integer a = 127, b = 127, c = -128, d = -128; Integer e = 128, f = 128, g = -129, h = -129; System.out.println(a == b); // true System.out.println(c == d); // true System.out.println(e == f); // false System.out.println(g == h); // false }
JVM对基本类型(boolean, float, double除外)进行了缓存,Integer默认范围是-128~127并可通过JVM参数修改上限,由于Integer是final类,故缓存范围内的Integer自动装箱时不产生新对象。
2. 集合框架
2.1 方法 List<E> subList(int fromIndex, int toIndex)
public static void main(String[] args) { List<Integer> arrayList = new ArrayList<Integer>(10); List<Integer> linkedList = new LinkedList<Integer>(); for (int i = 0; i < 10; i++) { arrayList.add(i); linkedList.add(i); } List<Integer> subArrayList = arrayList.subList(1, 4); List<Integer> subLinkedList = arrayList.subList(1, 4); System.out.println(subArrayList.getClass()); // class java.util.ArrayList$SubList System.out.println(subLinkedList.getClass()); // class java.util.ArrayList$SubList arrayList = (ArrayList<Integer>) subArrayList; // throws java.lang.ClassCastException }
List接口声明了subList方法,ArrayList与LinkedList中subList返回ArrayList中非静态内部内SubList作为原List的视图,对SubList的修改会造成原List的变化。
原文地址:https://www.cnblogs.com/miluroe/p/10886854.html
时间: 2024-10-12 13:39:53