• JAVA基本数据类型


    基本数据类(primitive data type)

            Java是一种强类型语言,每个变量都必须声明其类型

            Java的数据类型分为两大类:基本类型(primitive type)和引用类型 (reference type) 

            Java中定义了3类8种基本数据类型

            逻辑型-boolean 

            文本型- char

            数值型- byte,  short,  int,  long, float,  double

    20151028140757_746.png

    注:引用数据类型的大小统一为4个字节,记录的是其引用对象的地址!

    整型类型

        整型用于表示没有小数部分的数值,它允许是负数。

        整型的范围与运行Java代码的机器无关,这正是Java程序具有很强移植能力的原因之一。于此相反,C和C++程序需要针对不同的处理器选择最有效的整形。

    类型

    占用存储空间

    表数范围

    Byte

    1字节

    -128~127

    Short

    2字节

    -215 ~ 215-1 (-32768~32767)

    Int

    4字节

    -231 ~ 231-1 

    (-2147483648~2147483647) 约21亿

    Long

    8字节

    -263 ~ 263-1

      Java 语言整型常数的三种表示形式: 

          十进制整数,如:99, -500, 0。 

          八进制整数,要求以 0 开头,如:015。 

          十六进制数,要求 0x 或 0X 开头,如:0x15 。

      Java语言的整型常数默认为int型,声明long型常量可以后加‘ l ’或‘ L ’ ,如:

             a = 55555555;  //不出错,在Int表示的范围内(21亿内)。

             b = 55555555555;  //不加l出错,已经超过int表示的范围。    报错:The literal 55555555555 of type int is out of range 

            Java中没有无符号类型

     //测试整数类型:byte,short,int,long。以及进制之间的转换问题
    public class TestDataType {
        public static void main(String[] args){
            int a = 10;
            int a2 = 010;
            int a3 = 0xf;
            // byte b = 200;
            // System.out.println(b);
            System.out.println(a);
            System.out.println(a2);
            System.out.println(a3);
            System.out.println(Integer.toBinaryString(a));
            System.out.println(Integer.toOctalString(a));
            System.out.println(Integer.toHexString(a));
            t a5 = 10;
            long a6 = 200;
            byte b2 = 100;   //如果数据的大小没有超过byte/short/char的表述范围,则可以自动转型。
            long  a7 = 11123213232L;
            long l = 3;
            long l2 = l+3;    //L问题
            } 
    }

    浮点类型

    类型

    占用存储空间

    表数范围

    Float

    4字节

    -3.403E38~3.403E38

    Double

    8字节

    -1.798E308~1.798E308

    float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。

    double表示这种类型的数值精度是float类型的两倍,又被称作双精度,绝大部分应用程序都采用double类型。

    Java 浮点类型常量有两种表示形式: 

    十进制数形式,例如:3.14       314.0      0.314

    科学记数法形式,例如:314e2      314E2      314E-2 

    double f = 314e2;  //314*10^2-->31400.0
    double f2 = 314e-2; //314*10^(-2)-->3.14

    Float类型的数值有一个后缀F/f ,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D/d, 以明确其为double类型

    浮点类型float, double的数据不适合在不容许舍入误差的金融计算领域。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal

    注:

    主要理由:由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。浮点数一般都存在舍入误差,很多数字无法精确表示(例如0.1),其结果只能是接近,但不等于。

    二进制浮点数不能精确的表示0.1,0.01,0.001这样10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示。

    最好全完避免使用浮点数比较

           float f = 0.1f;
           double d = 1.0/10;
           System.out.println(f==d);   //false 
           float d1 = 423432423f;
           float d2 = d1+1;
           if(d1==d2){
               System.out.println("d1==d2");
           }else{
               System.out.println("d1!=d2");
           }

    大数值:

    Java.math下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。

    浮点数使用总结:

    1.         默认是double

    2.         浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。

    3.         避免比较中使用浮点数

    代码:

    //测试浮点数
    public class TestFloatType {
        public static void main(String[] args){
            //double d = 3.14;   //浮点数常量默认类型是double。
            //float f = 6.28F;
            double d2 = 314e-2;   //采用科学计数法的写法
            System.out.println(d2);
            float f = 0.1f;
            double d = 1.0/10;
            System.out.println(f==d);   //false
        }
    }

    字符类型(2个字节)

         .单引号用来表示字符常量。例如‘A’是一个字符,它与“A”是不同的,“A”表示含有一个字符的字符串。

        .  char 类型用来表示在Unicode编码表中的字符。

          Unicode编码被设计用来处理各种语言的所有文字,它占2个字节,可允许有65536个字符;ASCII码占1个字节,可允许有128个字符,是Unicode编码表中前128个字符。

    char eChar = 'a';
    char cChar ='中';

    Unicode具有从0到65535之间的编码,他们通常用从’u0000’到’uFFFF’之间的十六进制值来表示(前缀为u表示Unicode)

    char c = ‘u0061;

     .Java 语言中还允许使用转义字符 ‘’ 来将其后的字符转变为其它的含义,

    char c2 = '
    ';  //代表换行符

    转义符

    含义

    Unicode值

    

    退格(backspace)

    u0008

    换行

    u000a

    回车

    u000d

    制表符(tab)

    u0009

    双引号

    u0022

    单引号

    u0027

    \

    反斜杠

    u005c

     注:以后我们学的String类,其实是字符序列(char sequence)。

    布尔类型

    boolean类型(一位,不是一个字节)    boolean类型有两个值,true和false,不可以 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。

    boolean 类型用来判断逻辑条件,一般用于程序流程控制。

      boolean flag ;
            flag = ………;
           if(flag) {
          // true分支
         } else {
         //  false分支
        }

    代码

    //测试char
    public class TestCharType {
        public static void main(String[] args){
    
            char c1 = 'a';
            char c2 = '尚';   //unicode  2: 0-65535
            char c3 = '
    ';
            System.out.print(c1);
            System.out.print(c3);
            System.out.print(c2);
    
            char c4 = 'a';
            int i = c4 + 2;
            char c5 = (char)i;   //强制转型
            System.out.println(c5);
  • 相关阅读:
    使用javap分析Java的字符串操作
    使用javap深入理解Java整型常量和整型变量的区别
    分享一个WebGL开发的网站-用JavaScript + WebGL开发3D模型
    Java动态代理之InvocationHandler最简单的入门教程
    Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)
    Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)
    Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)
    Java实现 LeetCode 541 反转字符串 II(暴力大法)
    Java实现 LeetCode 541 反转字符串 II(暴力大法)
    Java实现 LeetCode 541 反转字符串 II(暴力大法)
  • 原文地址:https://www.cnblogs.com/outmanxiaozhou/p/10469963.html
Copyright © 2020-2023  润新知