五、BigDecimal
为什么使用BigDecimal?
很多实际应用中需要精确计算,而double是近似值存储,不再符合要求,需要借助BigDecimal。
double d1 = 1.0; double d2 = 0.9; System.out.println(d1-d2);
BigDeicmal基本用法
位置:java.math包中。
作用:精确计算浮点数。
创建方式:BigDecimal bd=new BigDecimal(“1.0”)。
常用方法:
方法名 描述
BigDecimal add(BigDecimal bd) 加
BigDecimal subtract(BigDecimal bd) 减
BigDecimal multiply(BigDecimal bd) 乘
BigDecimal divide(BigDecimal bd) 除
除法:divide(BigDecimal bd,int scal,RoundingMode mode)。
参数scale :指定精确到小数点后几位。
参数mode :
指定小数部分的取舍模式,通常采用四舍五入的模式。
取值为BigDecimal.ROUND_HALF_UP。
public class Demo { public static void main(String[] args) { double d1=1.0; double d2=0.9; System.out.println(d1-d2); //面试题 double result=(1.4-0.5)/0.9; System.out.println(result); //BigDecimal,大的浮点数精确计算 BigDecimal bd1=new BigDecimal("1.0"); BigDecimal bd2=new BigDecimal("0.9"); //减法 BigDecimal r1=bd1.subtract(bd2); System.out.println(r1); //加法 BigDecimal r2=bd1.add(bd2); System.out.println(r2); //乘法 BigDecimal r3=bd1.multiply(bd2); System.out.println(r3); //除法 BigDecimal r4=new BigDecimal("1.4") .subtract(new BigDecimal("0.5")) .divide(new BigDecimal("0.9")); System.out.println(r4); BigDecimal r5=new BigDecimal("20").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP); System.out.println(r5); }
六、System
System系统类,主要用于获取系统的属性数据和其他操作。
常用方法:
方法名 说明
static void arraycopy(…) 复制数组
static long currentTimeMillis() 获取当前系统时间,返回的是毫秒值
static void gc(); 建议JVM赶快启动垃圾回收器回收垃圾
static void exit(int status) 退出jvm,如果参数是0表示正常退出jvm,非0表示异常退出jvm。
示例:
public class TestSystem { public static void main(String[] args) { //1 arraycopy:数组的复制 //src:源数组 //srcPos:从那个位置开始复制 0 //dest:目标数组 //destPos:目标数组的位置 //length:复制的长度 int[] arr= {20,18,15,8,35,26,45,90}; int[] dest=new int[8]; System.arraycopy(arr, 4, dest, 4, 4); for(int i=0;i<dest.length;i++) { System.out.println(dest[i]); } //Arrays.copyOf(original, newLength) System.out.println(System.currentTimeMillis()); long start=System.currentTimeMillis(); for(int i=-9999999;i<99999999;i++) { for(int j=-999999;j<9999999;j++) { int result=i+j; } } //2 获取毫秒数 long end=System.currentTimeMillis(); System.out.println("用时:"+(end-start)); new Student("aaa", 19); new Student("bbb", 19); new Student("ccc", 19); //3回收垃圾 System.gc();//告诉垃圾回收期回收 //4推出jvm System.exit(0); System.out.println("程序结束了...."); } }
七、对象内存分析
按值传递
按址传递
class Person{ int age; String name; public Person(String name,int age){ this.name = name; this.age = age; } public void eat(){ System.out.println("吃东西。。"); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person{" + "age=" + age + ", name='" + name + '\'' + '}'; } } public class Demo { public static void test(int i){ System.out.println(i); i = 100; System.out.println(i); } public static void test2(Person person){ person.setName("wowo"); } public static void main(String[] args) { Person p1 = new Person("王二狗",5); Person p2 = new Person("李晓华",12); Person p3 = p1; System.out.println(p1); System.out.println(p2); System.out.println(p3); test2(p3); System.out.println(p3); System.out.println(p1); int a = 5; test(a); System.out.println(a); } }