zoukankan      html  css  js  c++  java
  • JAVA基础之基本类型包装类、System类、Math类、Arrays类及大数据运算

    个人理解:

      为了方便运算及调用一些方法,我们需要将基本类型的数值转换为对象;不过转换的时候需要特别注意好它们的类型到底是什么,需要调用方法的类名是哪个!特别注意是Byte常量池的相关问题(==);gc()垃圾回收机制的话,感觉还是靠系统自动判定哪个是新的,哪个是旧的,然后再根据不同质性不同的处理机制。没有最好的垃圾收集器,更加没有万能的收集器,只能选择对具体应用最合适的收集器。

    一、基本类型包装类:

    1、概述:

      基本属性类对象包装类:java将基本数据类型值封装成对象,这样就可以提供更多的操作基本数值的功能。

      注意:

      int对应的是Integer,char对应的是Character。

    2、字符串转成基本类型:

    String str="12";
    int num=Integer.parseInt(str);
    double num2=Double.parseDouble(str);

      parseXXX(String s);其中XXX表示基本类型,参数为可以转成基本类型的字符串,如果字符串无法转成基本类型,将会发生数字转换的问题 NumberFormatException其中必须不能包含多余的东西,如空格)

    3、基本数值转成字符串:

    ①、基本数值直接与“”想连接即可;

    ②、调用String的valueOf方法(属于静态的,直接类名调用);

    ③、调用包装类中的toString方法;

    System.out.println(""+12+1);
    String s1=String.valueOf(88);
    String s2=String.valueOf(1.2);
    System.out.println(s2+1);
    String s3=Integer.toString(99);
    System.out.println(s3+1);

    4、基本类型和对象的转换:

    ①、基本数值转包装对象:

      Integer(int value或者String s)  valueOf(int value或者String s)

    Integer i = new Integer(4);//使用构造函数函数
    Integer ii = new Integer("4");//构造函数中可以传递一个数字字符串

      Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法

      Integer iiii = Integer.valueOf("4");//使用包装类中的valueOf方法

    ②、包装对象转成基本数值(用包装对象调用):

    intValue()以int类型返回该Ingeter值;

    int num = i.intValue();

    5、自动装箱拆箱(JDK1.5以后):

    自动拆箱:对象自动直接转成基本数值;

    自动装箱:基本数值自动直接转成包装类对象;

    Integer i = 4;//自动装箱。相当于Integer i = new Integer(4);
    i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5; 加法运算完成后,再次装箱,把基本数值转成对象。

    (Integer比int好用,因为其可以存储null)

    自动装箱(byte常量池)细节的演示:

      当数值在byte范围之内时,进行自动装箱,不会新创建对象空间而是使用已有的空间。

    Integer a = new Integer(3);
    Integer b = new Integer(3);
    System.out.println(a==b);//false
    System.out.println(a.equals(b));//true
    
    System.out.println("---------------------");
    Integer x = 127;
    Integer y = 127;
    //在jdk1.5自动装箱时,如果数值在byte范围之内,不会新创建对象空间而是使用原来已有的空间。
    System.out.println(x==y); //true
    System.out.println(x.equals(y)); //true

    二、System类:

    1、概念:

      System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作。

      System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象。System类中的都是static方法,类名访问即可。

    2、常用方法:

    ①、currentTimeMillis() 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值

    ②、exit(int status) 用来结束正在运行的Java程序。参数传入一个数字即可。通常传入0记为正常状态,其他(非0)为异常状态

    ③、 gc() 用来运行JVM中的垃圾回收器,完成内存中垃圾的清除。

    ④、getProperty(String key) 用来获取指定(字符串名称)中所记录的系统属性信息

    ⑤、arraycopy方法,用来实现将源数组部分元素复制到目标数组的指定位置

    arraycopy(第一个数组,截取的位置。第二个数组,需要放置的位置,需要截取的长度)

    例如: 验证for循环打印数字1-9999所需要使用的时间(毫秒)

    public static void main(String[] args) {
         long start = System.currentTimeMillis();
        for (int i=1; i<10000; i++) {
             System.out.println(i);
    }
    long end = System.currentTimeMillis();
    System.out.println("共耗时毫秒:" + (end-start) );
    }

    src数组中前3个元素,复制到dest数组的前3个位置上

    public static void main(String[] args) {
    int[] src = new int[]{1,2,3,4,5};
    int[] dest = new int[]{6,7,8,9,10};
    System.arraycopy( src, 0, dest, 0, 3);
    代码运行后:两个数组中的元素发生了变化
    src数组元素[1,2,3,4,5]
    dest数组元素[1,2,3,9,10]
    }

     循环生成100-999之间的的三位数并进行打印该数,当该数能被10整除时,结束运行的程序

    public static void main(String[] args){
         Random random = new Random();
        while(true){
        int number = random.nextInt(900)+100; //0-899 + 100
        if (nmumber % 10 == 0) {
            System.exit(0);
    }
    }
    }

    三、Math类:

    1、概念:

      Math类是包含用于执行基本数学运算的方法的数学工具类,如初等指数、对数、平方根和三角函数。其所有方法均为静态方法,并且一般不会创建对象。

    2、常用方法:

    abs方法,结果都为正数

    double d1 = Math.abs(-5); // d1的值为5
    double d2 = Math.abs(5); // d2的值为5

    ceil方法,结果为比参数值大的最小整数的double值向上取整

    double d1 = Math.ceil(3.3); //d1的值为 4.0
    double d2 = Math.ceil(-3.3); //d2的值为 -3.0
    double d3 = Math.ceil(5.1); // d3的值为 6.0

    floor方法,结果为比参数值小的最大整数的double值向下取整

    double d1 = Math.floor(3.3); //d1的值为3.0
    double d2 = Math.floor(-3.3); //d2的值为-4.0
    double d3 = Math.floor(5.1); //d3的值为 5.0

    pow方法,返回第一个参数的第二个参数次幂的值

    double d1 = Math.pow(2.0, 3.0); //d1的值为 8.0
    double d2 = Math.pow(3.0, 3.0); //d2的值为27.0

    round方法,返回参数值四舍五入的结果

    double d1 = Math.round(5.5); //d1的值为6.0
    double d2 = Math.round(5.4); //d2的值为5.0

     random方法,产生一个大于等于0.0且小于1.0的double小数随机数

    double d1 = Math.random();

    四、Arrays类:

    1、概念:

      此类包含用来操作数组(比如排序和搜索)的各种方法。需要注意,如果指定数组引用为 null,则访问此类中的方法都会抛出空指针异常NullPointerException

    2、常用方法:

    sort方法,用来对指定数组中的元素进行升序排序(元素值从小到大进行排序)

    //源arr数组元素{1,5,9,3,7}, 进行排序后arr数组元素为{1,3,5,7,9}
    int[] arr = {1,5,9,3,7};
    Arrays.sort( arr );

     toString方法,用来返回指定数组元素内容的字符串形式

    int[] arr = {1,5,9,3,7};
    String str = Arrays.toString(arr); // str的值为[1, 3, 5, 7, 9]

     binarySearch方法,在指定数组中,查找给定元素值出现的位置。若没有查询到,返回位置为-(这个值应该在的位置)-1。(-下标-1)要求该数组必须是个有序的数组。

    int[] arr = {1,3,4,5,6};
    int index = Arrays.binarySearch(arr, 4); //index的值为2
    int index2= Arrasy.binarySearch(arr, 2); //index2的值为-2

    例如:

    定义一个方法,接收一个数组,数组中存储10个学生考试分数,该方法要求返回考试分数最低的后三名考试分数

    public static int[] method(double[] arr){
        Arrays.sort(arr); //进行数组元素排序(元素值从小到大进行排序)
        int[] result = new int[3]; //存储后三名考试分数
        System.arraycopy(arr, 0, result, 0, 3);//把arr数组前3个元素复制到result数组中
        return result;
    }

    五、大数据运算:

    1、BigInteger:

      java中long型为最大整数类型,对于超过long型的数据如何去表示呢.在Java的世界中,超过long型的整数已经不能被称为整数了,它们被封装成BigInteger对象.在BigInteger类中,实现四则运算都是方法来实现,并不是采用运算符。

    部分方法:

    public static void main(String[] args) {
            //大数据封装为BigInteger对象
              BigInteger big1 = new BigInteger("12345678909876543210");
              BigInteger big2 = new BigInteger("98765432101234567890");
              //add实现加法运算
              BigInteger bigAdd = big1.add(big2);
              //subtract实现减法运算
              BigInteger bigSub = big1.subtract(big2);
              //multiply实现乘法运算
              BigInteger bigMul = big1.multiply(big2);
              //divide实现除法运算
              BigInteger bigDiv = big2.divide(big1);
    }

    2、BigDecimal类:

      double和float类型在运算中很容易丢失精度(计算机是二进制的,在计算时会丢失精度),造成数据的不准确性,Java提供我们BigDecimal类可以实现浮点数据的高精度运算。

      建议浮点数据以字符串形式给出,因为参数结果是可以预知的

      

    public static void main(String[] args) {
              //大数据封装为BigDecimal对象
              BigDecimal big1 = new BigDecimal("0.09");
              BigDecimal big2 = new BigDecimal("0.01");
              //add实现加法运算
              BigDecimal bigAdd = big1.add(big2);
            
              BigDecimal big3 = new BigDecimal("1.0");
              BigDecimal big4 = new BigDecimal("0.32");
              //subtract实现减法运算
              BigDecimal bigSub = big3.subtract(big4);
              
              BigDecimal big5 = new BigDecimal("1.105");
              BigDecimal big6 = new BigDecimal("100");
              //multiply实现乘法运算
              BigDecimal bigMul = big5.multiply(big6);

      对于浮点数据的除法运算,和整数不同,可能出现无限不循环小数,因此需要对所需要的位数进行保留和选择舍入模式。

    divide(BigDecimal divisor,保留几位小数,选择向上还是向下)

    BigDecimal bd7=new BigDecimal("1.301");
    BigDecimal bd8
    =new BigDecimal("100"); System.out.println(bd7.divide(bd8,2,BigDecimal.ROUND_FLOOR));//除,取两位有效数字并向下取整
  • 相关阅读:
    convert image to base64 and post to RESTful wcf
    在android webview实现截屏的手动tounchmove裁剪图片
    How to use jquery ajax and android request security RESTful WCF
    using swfUpload in asp.net mvc
    using HttpClient and sending json data to RESTful server in adroind
    ODP.NET数据访问
    android image watermark
    解决国内不能访问github的问题
    idapro权威指南第二版阅读笔记第九章 交叉引用和绘图功能
    idapro权威指南第二版阅读笔记第二章 逆向和反汇编工具
  • 原文地址:https://www.cnblogs.com/21-forever/p/10932184.html
Copyright © 2011-2022 走看看