# ITG-JavaBook01 **Repository Path**: sky_kia/ITG-JavaBook01 ## Basic Information - **Project Name**: ITG-JavaBook01 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-02-10 - **Last Updated**: 2021-03-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 为什么要深拷贝和浅拷贝?? 开发过程中, 有时会遇到把现有的一个对象的所有成员属性拷贝给另一个对象的需求; 特别是 dao ==> vo , 一大堆字段不可能set来set去; 比如说对象 A 和对象 B, 二者都是 ClassC 的对象, 具有成员变量 a 和 b, 现在对对象 A 进行拷贝赋值给 B, 也就是 B.a = A.a; B.b = A.b; 这时再去改变 B 的属性 a 或者 b 时, 可能会遇到问题:假设 a 是基础数据类型, b 是引用类型。 当改变 B.a 的值时, 没有问题; 当改变 B.b 的值时, 同时也会改变 A.b 的值, 因为其实上面的例子中只是把 A.b 赋值给了 B.b, 因为是 b 引用类型的, 所以它们是指向同一个地址的, 这可能就会给我们使用埋下隐患; 一旦使用拷贝, 引用类型会导致 数据出现问题; 使用序列化可以通过很简洁的代码即可完美实现深拷贝。不过要注意的是,如果某个属性被transient修饰,那么该属性就无法被拷贝了 Integer 类需要注意的一些单词: > radix 进制; 基数; 鼻根 关于 |= 运算符:|= 运算符和 += 这一类的运算符一样,拆解开就是 a = a | b; |=:两个二进制对应位都为0时,结果等于0,否则结果等于1; &=:两个二进制的对应位都为1时,结果为1,否则结果等于0; ^=:两个二进制的对应位相同,结果为0,否则结果为1。 public static strictfp void main(String[] args) { int a = 5; // 0000 0101 int b = 3; // 0000 0011 a |= b; // 0000 00111 System.out.println(a); } public static strictfp void main(String[] args) { int a = 5; // 0000 0101 int b = 3; // 0000 0011 a &= b; // 0000 0001 System.out.println(a); } public static strictfp void main(String[] args) { int a = 5; // 0000 0101 int b = 3; // 0000 0011 a ^= b; // 0000 0110 System.out.println(a); } 简单来讲:自动装箱就是Integer.valueOf(int i);自动拆箱就是 i.intValue(); public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } static final int low = -128; assert IntegerCache.high >= 127;   分析源码我们可以知道在 i >= -128 并且 i <= 127 的时候,第一次声明会将 i 的值放入缓存中, 第二次直接取缓存里面的数据,而不是重新创建一个 Integer 对象。 那么第一个打印结果因为 i = 10 在缓存表示范围内,所以为 true。 junit 4.12和 Jupiter.junit 有什么区别 很奇怪的问题, 在maven中 junit4.12 不能 chapter2.src.com.kkb.array 这个 路径下 使用 @Test 注解 ; 但是 junit 5 却可以?? 当时我读 初中的时候有一条数学题; 往一个水池加水, 但是 这个水池 漏水; 问什么时候能加满这个水池; 集合也是一样的, 集合就是一个池, 你往里面添加元素的同时, 也remove 掉 一些元素; 然后问 这个 集合的size 什么时候能 到100 (假设) ; 然后里面的元素是什么?