
java基础
文章平均质量分 82
GordonH1991
从事安卓frameworks和app开发
展开
-
Java 浅拷贝和深拷贝
但这个方法有个弊端,就是如果引用对象的链路比较深,例如 A 引用 B,B 引用 C,C 引用 D,甚至更深,就需要重写很多。浅拷贝会创建一个新的对象,复制该对象的基本类型引用,但不复制该对象内的其他对象引用。一个对象要支持浅拷贝,需要实现。两个完全不同的对象,也即是要实现深拷贝,有两个办法,下文介绍两种方法。是不可变的,修改String类型都会返回一个新对象,参考文档。类型的对象引用,但是却可以不用实现。需要注意的是引用对象的类型也要实现。接着使用IO实现序列化和反序列化。指向不同的对象,但是里面的。原创 2025-03-13 18:04:47 · 183 阅读 · 0 评论 -
String的基础知识
中可以看到 从 android 5.0 后就需要使用 jdk 7 以上的版本,这里讨论的默认字符串常量池放置在虚拟机的堆内存中,不再过多讨论永久代(Permanent Generation, PermGen) 的方法区,事实上从 java 8 后,JVM 就已经没有永久代了,取而代之的是元空间(MetaSpace)原创 2025-01-21 10:58:01 · 685 阅读 · 0 评论 -
Java volatile 关键字
同一个成员变量在不同线程中处于各自独立的虚拟机栈帧中,A 线程修改了该变量,B 线程中读的值可能仍然是其内存缓存的值。不管是 cpu 还是虚拟机,都会对操作指令进行重新排序以到达最佳的执行效果,volatile 针对 JVM 指令禁止重排序,达到避免因指令重排在某些边界条件下出现的不符合预期的问题。这是一个典型的双重校验的懒汉式模的单例模式,但这里隐藏着一个重大风险,就是在多线程访问下,在创建之初,某个线程会获取到一个没有执行。在禁止指令重排上的使用场景,接下来再看看确保变量的内存可见性的场景,在。原创 2025-03-10 01:21:00 · 655 阅读 · 0 评论 -
Java 原码,反码,补码和位移操作
由于int类型占32位,则最终结果则为 00000000,00000000,00000000,00000000,即是0。java 中正数的原码,反码和补码一致。负数的反码为除最高位,其余位去反。负数的补码为负数的反码 + 1。cpu 是有加法,没有减法,减法通过加一个负数,最后溢出一位的原理实现,以 5 - 5 为例。java 中正数和负数都是通过补码的形式存储。注意:java 没有无符号左移运算符 <<<位移运算符,还是分别以 5 和 -5 举例。原创 2025-02-12 16:04:15 · 285 阅读 · 0 评论 -
浅谈Java中的接口回调
接口Interface,我们都不陌生,Java中接口原创 2014-03-23 19:19:33 · 1393 阅读 · 0 评论 -
用java实现欧几里得算法求两个数字的最大公约数
最大公约数最大公约数的定义是两个不全为0的非负整数m和n的最大公约数记为gcd(m , n),代表能够整除(即余数为0)的最大整数。欧几里得算法原理:1.如果n == 0,则m就是最大公约数2.如果n != 0,用m去除以n得到模k,将n赋值给m,将k赋值给n,直到n == 0实现代码如下import jav原创 2015-10-26 00:27:56 · 3692 阅读 · 2 评论 -
java实现合并排序算法
前言 合并排序是分治法当中一个经典的排序算法,它通过将规模为n的原始问题分解为n/2,然后得到各自的解后,在合并两个子问题的解,最终得到原始问题的解。合并排序属于稳定排序,在排序过程中,如果遇到Ai==Aj,假设i < j,在完成排序后不会影响Ai和Aj的相对位置,即Ai仍然在Aj前面。 合并排序的时间复杂度是O(nlogn),但是在排序当中需要递归拆分元问题,空间复杂度是O(...原创 2018-04-06 17:43:39 · 8282 阅读 · 0 评论 -
HashMap实现原理分析
HashMap 介绍 HashMap在我们的日常开发中非常常见,其本质就是基于数组和链表组合实现。它提供了很方便的key-value的存取接口,通过对key进行Hash计算散列存储位置和快速查找,HashMap允许key和value为null。HashMap并不是线程安全的,如果存在多线程存取操作容易出现注明的ConcurrentModificationException异常。其存储方式可以...原创 2018-04-06 18:16:46 · 372 阅读 · 0 评论