Java基础拾遗(一)
虽然这个专栏系列旨在告诉大家如何快速的开发一个Android原生的app,但是工欲善其事,必先利其器。因此,在开始这个专栏系列之前,我想先把平日里容易混淆和遗忘的部分Java基础知识,我们一起复习下。(小专栏地址:https://xiaozhuanlan.com/android_ls)
1、基础数据类型(int、short、float、double等)的包装类型的equals()和==,我们拿Integer做示例:
Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
注意点:在byte的值范围以内,JVM不会重新new对象
Integer a = 127;// Integer a = new Integer(127);
Integer b = 127;// Integer b = a;
System.out.println(a == b); // true
System.out.println(a.equals(b)); // true
在大于byte的取值范围
Integer a = 500;
Integer b = 500;
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
2、超过long取值范围的整数,使用BigInteger类型来表示其数据类型
// long类型已经不能表示该数了
// long a = 26486278478278347824728647823648723647823746L;
BigInteger bigInteger = new BigInteger("26486278478278347824728647823648723647823746");
System.out.println(bigInteger);
用BigInteger类型来声明的变量的加减乘除运算
BigInteger b1 = new BigInteger("1647678416487364761894271874687134687");
BigInteger b2 = new BigInteger("1647678416487364761894271874687134687");
BigInteger result = b1.add(b2); // 加法
BigInteger result = b1.subtract(b2); // 减法
BigInteger result = b1.multiply(b2); // 乘法
BigInteger result = b1.divide(b2); // 除法
System.out.println(result);
3、BigDecimal类型,用于做精确计算,因为浮点型的数据类型本身表示是不精确的,凡是涉及到钱的可以使用该类进行计算。
BigDecimal bi1 = new BigDecimal("0.9");
BigDecimal bi2 = new BigDecimal("0.1");
BigDecimal result = bi1.add(bi2); // 加法
BigDecimal result = bi1.subtract(bi2); // 减法
BigDecimal result = bi1.multiply(bi2); // 乘法
BigDecimal result = bi1.divide(bi2); // 除法
System.out.println(result);
注意点:
BigDecimal的除法运算
BigDecimal bi1 = new BigDecimal("1.301");
BigDecimal bi2 = new BigDecimal("101");
BigDecimal result = bi1.divide(bi2); // 除法
System.out.println(result);
会报如下错误:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
解决办法:
BigDecimal bi1 = new BigDecimal("1.301");
BigDecimal bi2 = new BigDecimal("100");
// BigDecimal.ROUND_UP: 0.01301-->0.014,向上加1
// BigDecimal.ROUND_DOWN 0.01301-->0.013,直接舍去
// BigDecimal.ROUND_HALF_UP 0.01301-->0.013,>= 0.5,向上加1
// BigDecimal result = bi1.divide(bi2, 3, BigDecimal.ROUND_HALF_DOWN); // 0.013,直接舍去
// BigDecimal result = bi1.divide(bi2, 3, BigDecimal.ROUND_HALF_UP); // 0.013,>= 0.5,向上加1
BigDecimal result = bi1.divide(bi2, 3, BigDecimal.ROUND_UP); // 0.014,向上加1
System.out.println(result);
4、Math类常用的方法
abs()求绝对值函数,对各种数据类型求绝对值
System.out.println(Math.abs(-10)); // 输出10
max(a,b)求最大值
System.out.println(Math.max(1, 2)); // 输出2
min(a,b)求最小值
System.out.println(Math.min(1.9, -0.2)); // 输出-0.2
随机数random()返回[0.0,1.0)之间的double值,这个产生的随机数其实可以通过x控制,比如(int)(random100)后可以得到[0,100)之间的整数。
System.out.println((int)(Math.random()*100)); // 输出[0,100)间的随机数
ceil(a) 返回大于a的第一个整数所对应的浮点数(值是整的,类型是浮点型),可以通过强制转换将类型换成整型。
System.out.println(Math.ceil(1.3443)); // 输出2.0
System.out.println((int)Math.ceil(1.3443)); // 输出2
floor(a) 返回小于a的第一个整数所对应的浮点数(值是整的,类型是浮点型)
System.out.println(Math.floor(1.3443)); // 输出1.0
rint(a) 返回最接近a的整数的double值
System.out.println(Math.rint(1.2)); // 输出1.0
System.out.println(Math.rint(1.8)); // 输出2.0
5、Object的finalize()方法,让系统回收不再使用的对象,每个对象在被回收时,系统都会调用其finalize()方法。
public class PresonInfo {
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("我被系统回收了");
}
}
for (int i = 0; i < 1000000; i++) {
new PresonInfo(); // new的对象,当没有任何其他对象引用时,它就是垃圾
}
System.gc();
6、查看运行环境的信息
String proStr = System.getProperties().toString();
System.out.println(proStr);
运行之后的结果如下:
{java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib, java.vm.version=25.5-b02, gopherProxySet=false, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=:, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=unknown, java.vm.specification.name=Java Virtual Machine Specification, user.dir=/Users/android_ls/Documents/workspace_javaee/Test, java.runtime.version=1.8.0_05-b13, java.awt.graphicsenv=sun.awt.CGraphicsEnvironment, java.endorsed.dirs=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/endorsed, os.arch=x86_64, java.io.tmpdir=/var/folders/4m/3wr7c_xj7336fylxzrljv0qm0000gn/T/, line.separator=
, java.vm.specification.vendor=Oracle Corporation, os.name=Mac OS X, sun.jnu.encoding=UTF-8, java.library.path=/Users/android_ls/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:., java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, os.version=10.12.1, user.home=/Users/android_ls, user.timezone=Asia/Shanghai, java.awt.printerjob=sun.lwawt.macosx.CPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/htmlconverter.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/lib/tools.jar:/Users/android_ls/Documents/workspace_javaee/Test/out/production/Test, user.name=android_ls, java.vm.specification.version=1.8, sun.java.command=com.miliyo.test.Main, java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre, sun.arch.data.model=64, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.lwawt.macosx.LWCToolkit, java.vm.info=mixed mode, java.version=1.8.0_05, java.ext.dirs=/Users/android_ls/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java, sun.boot.class.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/classes, java.vendor=Oracle Corporation, file.separator=/, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, sun.io.unicode.encoding=UnicodeBig, sun.cpu.endian=little, sun.cpu.isalist=}
这一篇,我们就先复习到这里,希望对你有所帮助,谢谢!