Java基础
翁正存
做一名合格的工程师
展开
-
Java无锁并发工具类Unsafe.compareAndSwapLong方法
方法是一个原子操作,通常用于并发编程中的无锁算法。它的作用是以原子方式比较并交换某个对象的一个long类型的字段。类一起使用,这是一个用于执行低级操作的类。它允许你直接操作Java对象的内存,包括获取和设置字段的值、分配和释放内存等。如果不相等,说明其他线程可能已经修改过这个字段的值,那么方法不做任何操作,并返回。如果相等,说明没有其他线程修改过这个字段的值,那么方法会将该字段更新为。方法通常用于实现高性能的并发数据结构,如。原创 2023-09-01 10:56:47 · 220 阅读 · 0 评论 -
有符号数加法溢出
Java的基本数据类型都是有符号数,我们知道表示数据的字长是固定的,例如int的长度为32位(4byte),在进行加减乘除时,得到的结果可能需要超过32位字长才能精确表示,但是操作系统限制了数据类型的精度不是无限的,只能使用规定的字长,这就导致了结果会被截断,从而产生了溢出。public class OverflowTest { public static void main(Str...原创 2019-09-02 11:19:32 · 1556 阅读 · 1 评论 -
Byte和Integer互转
Byte有个方法public int intValue() { return (int)value;}Byte a = new Byte(1);int b = a.intValue; //将Byte转为intnew Integer(1).byteValue() //将int转为byte原创 2019-07-25 16:58:02 · 10305 阅读 · 1 评论 -
Java 下划线特性
看JDK源码时看到下边的代码:if (timeout != 0) { long end = System.nanoTime(); timeout -= (end - start) / 1000_000; if (timeout <= 0) return null; start = end;}数值1000_000有点奇怪,竟然用下划线分隔开。查了一下...原创 2019-06-06 11:12:29 · 1277 阅读 · 0 评论 -
Exception分类
Exception分为unchecked Exception和checked Exception,其中unchecked Exception指runtimeException与其子类,这类异常不需要try-catch捕获或throws抛出,如:1.java.lang.NullPointerException;2.java.lang.ArithmaticException;3.java.l...原创 2019-06-05 20:39:27 · 1292 阅读 · 0 评论 -
Java的NaN
看JDK源码时看到Math下边有个函数:public static float max(float a, float b) { if (a != a) return a; // a is NaN if ((a == 0.0f) && (b == 0.0f) && (Float.floatToR...原创 2019-06-05 16:37:12 · 166 阅读 · 0 评论 -
深拷贝
public class A implements Cloneable,Serializable { private String name; public String getName() { return name; } public void setName(String name) { this.name = name...原创 2019-05-17 14:27:36 · 134 阅读 · 0 评论 -
整数与字节数组相互转化
public class ByteUytils { public static byte[] int2ByteArray(int i) { byte[] result = new byte[4]; //int是4字节 result[0] = (byte)((i >>24) & 0xff); result[1] = (b...原创 2019-05-13 13:49:59 · 997 阅读 · 0 评论 -
StringBuffer与StringBuilder的区别
StringBuffer的方法都加了synchronized关键字,所以是线程安全的,而StringBuilder是线程不安全的。看一个方法append:StringBuffer的@Overridepublic synchronized StringBuffer append(char[] str) { toStringCache = null; super.app...原创 2019-05-22 14:17:39 · 141 阅读 · 0 评论 -
整数数值溢出
public static void main(String[] args) { int i = 200 * 300 * 400 * 500; System.out.println(i); long j = (200L * 300L * 400L * 500L); System.out.println(j);}输出-884901888120000000...原创 2019-05-07 17:27:13 · 804 阅读 · 0 评论 -
继承接口
public interface A {}public interface C {}public interface B extends A,C{}结论:class只支持单根继承,interface可以继承多个接口。原创 2019-05-08 21:00:59 · 255 阅读 · 0 评论 -
Java方法重载
为什么有方法重载?在Java中,最初是为了支持多构造器,满足以不同参数初始化构造器的需求。重载的方法具有相同的名字,如何区分它们?每个重载的方法都具有独一无二的参数类型列表,甚至参数类型列表的顺序不同也可以用来区分两个重载的方法。public class OverLoadingOrder { static void f(String s, int i) { Sy...原创 2019-05-06 13:43:55 · 1135 阅读 · 0 评论 -
Java标签
标签不常用,一般用于嵌套的循环体,从多层嵌套的循环中break或者continue.1.一般的continue会退回到最内层循环的开头,并继续执行;带标签的continue会到达标签的位置,并重新进入紧接在标签后边的外层循环。2.一般的break会中断并跳出当前循环,带标签的循环会中断并跳出标签所指的循环。public class LabelTest { public ...原创 2019-05-06 10:52:12 · 387 阅读 · 0 评论 -
Java中的classpath
Java项目一般会有很多配置文件怎么将这些文件加载到Java代码里?Spring是这么用的:看到一个奇怪的东东:classpath前缀,这是啥?这个问题放一放,来看编译后的jar包目录:继续展开目录得到:看到了吧,所有的配置文件都在classes目录下,那么classpath是啥呢?你可以理解为就是编译后的classes下的路径!...原创 2019-04-19 20:44:45 · 158 阅读 · 0 评论 -
整数相加溢出的解决办法:使用long
输入一个整数链表,求均值。别傻傻地认为直接遍历数组,做加法,然后输出均值就好了。需要考虑当输入的整数为Integer.MAX_VALUE时,直接将两个整数相加会产生溢出,需要使用Long保存sum。public class AddAllNumber { public static Double averageOfArray(List<Integer> list){ ...原创 2019-03-18 17:30:14 · 1570 阅读 · 0 评论 -
Java将整数转为Double或者Float
int i = 1;Float f = i * 1.0f;Double d = i * 1.0;原创 2019-03-18 17:20:30 · 2875 阅读 · 0 评论 -
StringBuffer和StringBuilder的区别
两个类都是继承 AbstractStringBuilder并实现了java.io.Serializable、CharSequence,两者的区别是:StringBuffer是线程安全的:@Overridepublic synchronized StringBuffer append(Object obj) { toStringCache = null; super.ap...原创 2019-01-31 20:53:38 · 90 阅读 · 0 评论 -
Java在接口中赋值
public class AssignTest { public static Integer value = -1; public static void printValue(Integer value) { System.out.println("printValue: " + value); } public static void ...原创 2019-01-31 19:12:31 · 1626 阅读 · 0 评论