zoukankan      html  css  js  c++  java
  • java基础

    BigDecimal

    一般的float型和Double型数据只可 以用来做科学计算或者是工程计算,由于在商业计算中,要求的数字精度比较高,所以要用到java.math.BigDecimal类,它支持任何精度的定 点数,可以用它来精确计算货币值。

    package test.java;

    import java.math.BigDecimal;

    public class TestBigDecimal {

         public static void main(String args[]) {
                // System.out.println(0.05 + 0.01);
                // System.out.println(1.0 - 0.42);
                // System.out.println(4.015 * 100);
                // System.out.println(123.3 / 100);
                // System.out.println(add(1.11, 2.34));  //加法
    //         System.out.println(sub(1.11, 2.34)); //减法
    //         System.out.println( mul(1.11, 2.34)); //乘法
    //         System.out.println( div(1.11, 2.34)); //乘法
               System. out.println( round(Math.PI, 3));      //乘法
         }

         // 默认除法运算精度
         private static final int DEF_DIV_SCALE = 10;

         // 提供精确的加法运算。
         public static double add(double v1, double v2) {
               BigDecimal b1 = new BigDecimal(Double. toString(v1));
               BigDecimal b2 = new BigDecimal(Double. toString(v2));
                return b1.add(b2).doubleValue();
         }

         // 提供精确的减法运算。
         public static double sub(double v1, double v2) {
               BigDecimal b1 = new BigDecimal(Double. toString(v1));
               BigDecimal b2 = new BigDecimal(Double. toString(v2));
                return b1.subtract(b2).doubleValue();
         }

         // 提供精确的乘法运算。
         public static double mul(double v1, double v2) {
               BigDecimal b1 = new BigDecimal(Double. toString(v1));
               BigDecimal b2 = new BigDecimal(Double. toString(v2));
                return b1.multiply(b2).doubleValue();
         }

         // 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到小数点以后10位,以后的数字四舍五入。
         public static double div(double v1, double v2) {
                return div(v1, v2, DEF_DIV_SCALE);
         }

         // 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指精度,以后的数字四舍五入。
         public static double div(double v1, double v2, int scale) {
                if (scale < 0) {
                     throw new IllegalArgumentException(
                                "The   scale   must   be   a   positive   integer   or   zero");
               }
               BigDecimal b1 = new BigDecimal(Double. toString(v1));
               BigDecimal b2 = new BigDecimal(Double. toString(v2));
                return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
         }

         // 提供精确的小数位四舍五入处理。
         public static double round(double v, int scale) {
                if (scale < 0) {
                     throw new IllegalArgumentException(
                                "The   scale   must   be   a   positive   integer   or   zero");
               }
               BigDecimal b = new BigDecimal(Double. toString(v));
               BigDecimal one = new BigDecimal( "1");
                return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
         }

    }

    Object类的clone()方法

    clone()
              创建并返回此对象的一个副本。


    泛型:

         1、泛型是java的一种类型
         2、泛型是ParameterizedType
              *泛型的组成:
                   Class(类或接口)<T,E,F>
                        Class(类或接口) rawType               Type
                        T,E,F               actualTypeArguments Type[]
                   参数的传递方法
                        1、在创建对象的时候可以把参数传递进去
                             ArrayList<Department> dList = new ArrayList<Department>();
                        2、public interface A<T>
                           public class B<T> implements B<E>
                           public class D extends B<E>
                           向上看
                   得到泛型类
                   Class c.getGenericSuperclass();
         举例:public class DepartmentDaoImpl extends BaseDaoImpl<Department >
                   class BaseDaoImpl< T> implements BaseDao< T>
                   this .getClass().getGenericSuperclass();
                   this:BaseDaoImpl  getGenericSuperclass得到泛型的父类即T的父类(传入泛型的值)


    ConcurrentHashMap和Hashtable的区别

    Hashtable和ConcurrentHashMap有什么分别呢?它们都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间。因为ConcurrentHashMap引入了分割(segmentation),不论它变得多么大,仅仅需要锁定map的某个部分,而其它的线程不需要等到迭代完成才能访问map。简而言之,在迭代的过程中,ConcurrentHashMap仅仅锁定map的某个部分,而Hashtable则会锁定整个map。


    ==与equals方法的区别

    ==与equals的主要区别是:==常用于比较原生类型,而equals()方法用于检查对象的相等性。另一个不同的点是:如果==和equals()用于比较对象,当两个引用地址相同,==返回true。而equals()可以返回true或者false主要取决于重写实现。最常见的一个例子,字符串的比较,不同情况==和equals()返回不同的结果。




  • 相关阅读:
    各个版本的iPhone SDK下载地址
    [置顶]JavaScript类型总览(图)
    自定义UIPageControl 控件(一)
    用自定义协议调用自己的程序
    【Android游戏开发二十六】追加简述SurfaceView 与 GLSurfaceView效率!
    【Cocos2d游戏开发之三】CCScene切换的所有特效(27种)以及设置屏幕横竖屏!
    【Cocos2d游戏开发之五】多触点与触屏事件详解(单一监听、事件分发)
    【Cocos2d游戏开发之六】对触屏事件追加讲解,解决无法触发ccTouchMoved事件[重要!]
    使用UIView实现自动登录
    苹果推送通知服务(APNs)编程
  • 原文地址:https://www.cnblogs.com/kuyuyingzi/p/4266371.html
Copyright © 2011-2022 走看看