zoukankan      html  css  js  c++  java
  • java基础-02数据类型

    基本类型

    整数

    byte

    • byte 数据类型是8位、有符号的,以二进制补码表示的整数
    • 最小值是 -128(-2^7)
    • 最大值是 127(2^7-1)
    • 默认值是 0
    • byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一
    • 例子:byte a = 100,byte b = -50

    short

    • short 数据类型是 16 位、有符号的以二进制补码表示的整数
    • 最小值是 -32768(-2^15)
    • 最大值是 32767(2^15 - 1)
    • Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一
    • 默认值是 0
    • 例子:short s = 1000,short r = -20000。

    int

    • int 数据类型是32位、有符号的以二进制补码表示的整数
    • 最小值是 -2,147,483,648(-2^31)
    • 最大值是 2,147,483,647(2^31 - 1)
    • 一般地整型变量默认为 int 类型
    • 默认值是 0
    • 例子:int a = 100000, int b = -200000

    long

    • long 数据类型是 64 位、有符号的以二进制补码表示的整数
    • 最小值是 -9,223,372,036,854,775,808(-2^63)
    • 最大值是 9,223,372,036,854,775,807(2^63 -1)
    • 这种类型主要使用在需要比较大整数的系统上
    • 默认值是 0L
    • 例子: long a = 100000L,Long b = -200000L
    • "L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。

    小数

    float

    • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数
    • float 在储存大型浮点数组的时候可节省内存空间
    • 默认值是 0.0f
    • 浮点数不能用来表示精确的值,如货币(用BigDecimal)
    • 例子:float f1 = 234.5f。

    double

    • double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数
    • 浮点数的默认类型为double类型
    • double类型同样不能表示精确的值,如货币(用BigDecimal)
    • 默认值是 0.0d
    • 例子:double d1 = 123.4

    其它

    char

    • char类型是一个单一的 16 位 Unicode 字符,可以看做无符号整数。
    • 最小值是 u0000(即为0)
    • 最大值是 uffff(即为65,535 , 2^16 -1)
    • char 数据类型可以储存任何字符
    • 例子:char letter = 'A'

    boolean

    • boolean数据类型表示1个比特位的信息
    • 只有两个取值:true 和 false
    • 这种类型只作为一种标志来记录 true/false 情况
    • 默认值是 false
    • 例子:boolean one = true

    引用类型

    • 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
    • 对象、数组都是引用数据类型。
    • 所有引用类型的默认值都是null。
    • 一个引用变量可以用来引用任何与之兼容的类型。

    字符串

    • String 类是不可改变的,如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类。
    • 直接赋值初始化,如果常量池(哈希表,key是字符串值,value是对象地址)存在,返回内存地址,否则创建一个新字符串对象,这叫做 字符串驻留,比如String str1 = "ABC"; 这种构造效率高。
    • 使用new 初始化,每次都会创建新字符串对象,String str2 = new String("ABC"); 判断字符串值是否相等,使用equals
    • string 的hashcode()计算方式
    string的哈希计算公式为 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
    取31为权:主要是因为31是一个奇质数,所以31*i=32*i-i=(i<<5)-i,这种位移与减法结合的计算相比一般的运算快很多。
    

    数组

    声明数组
    String [] arrStr = {"aa","bb"}; // 推荐这种声明方式: 类型[] 变量
    String arrStr2[] = {"aa","bb"}; // 类型 变量[] 是c++风格的。
    
    System.out.println(Arrays.toString(arrStr) ); // 输出数组元素
    System.out.println( Arrays.toString(arrStr2));
    

    Arrays工具类:

    Arrays.toString(arrar):返回数组所有元素
    Arrays.fill(array, 5):使用5填充所有的数组元素
    Arrays.sort(array1):对整个数组排序
    Arrays.equals(array, array1):比较数组array和array1的值是否相同
    Arrays.binarySearch(array, key):通过二分查找,key是否在array中
    

    为什么获取数组的长度用 .length (成员变量的形式),而获取String的长度用 .length() (成员方法的形式)?”
    因为数组的长度存在对象头中,数组本身是没有length成员变量的。

    类和对象

    • 类:类是一个模板,它描述一类对象的行为和状态。
    • 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。
    • 一个源文件中只能有一个public类
    • 一个源文件可以有多个非public类
    • 源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。
    • 如果一个类定义在某个包中,那么package语句应该在源文件的首行。
    • 如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
    • import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。

    枚举类型

    枚举的定义和使用

    //定义枚举类型,使用关键字enum
    enum Day {
        MONDAY, TUESDAY, WEDNESDAY,
        THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
    // 使用枚举
    Day day =Day.MONDAY;
    

    枚举的实现原理

    • 生成一个类Day,该类继承自Enum
    • 枚举中的每一个实例,成为类Day的实例
    
    //反编译Day.class
    final class Day extends Enum
    {
        //私有构造函数
        private Day(String s, int i)
        {
            super(s, i);
        }
         //前面定义的7种枚举实例
        public static final Day MONDAY;
        public static final Day TUESDAY;
        public static final Day WEDNESDAY;
        public static final Day THURSDAY;
        public static final Day FRIDAY;
        public static final Day SATURDAY;
        public static final Day SUNDAY;
        private static final Day $VALUES[];
    
        static 
        {    
            //实例化枚举实例
            MONDAY = new Day("MONDAY", 0);
            TUESDAY = new Day("TUESDAY", 1);
            WEDNESDAY = new Day("WEDNESDAY", 2);
            THURSDAY = new Day("THURSDAY", 3);
            FRIDAY = new Day("FRIDAY", 4);
            SATURDAY = new Day("SATURDAY", 5);
            SUNDAY = new Day("SUNDAY", 6);
            $VALUES = (new Day[] {
                MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
            });
        }
    }
    
    

    补充

    二进制中的原码、反码、补码

    对于有符号数而言:

    • 二进制的最高位是符号位:0表示正数,1表示负数

    • 正数的原码、反码、补码都一样;

    • 负数的反码 = 它的原码符号位不变,其他位取反(0 ->1 ; 1->0 );

    • 负数的补码 = 它的反码 +1;

    • 0的反码、补码都是0;

    • 在计算机运算的时候,都是以补码的方式来运算的;

    使用BigDecimal表示金额

    我们可以使用BigDecimal来表示金额,或者是通过将金额的单位变小用整数来表示金额。

    // 建议优先使用String构造方法。不要使用double类型的构造函数,否则还是会转为多精度的小数
    BigDecimal ba = new BigDecimal("0.03"); // 直接用string
    BigDecimal bb = new BigDecimal(Double.toString(0.02)); // double转为string
    System.out.printf("%s-%s = %s 
    ",ba.toString(),bb.toString() , ba.subtract(bb));
    

    参考

  • 相关阅读:
    java keytool证书工具使用小结(转)
    Https socket 代理
    SSL连接出现的问题
    Https 代理 sslsocket
    Https socket 连接
    linux系统一键安装phpstudy的lnmp环境
    Yii2框架实现计数器功能
    yii2框架增删改查案例
    yii2框架原生的结合框架使用的图片上传
    php将抓取的图片链接下载到本地
  • 原文地址:https://www.cnblogs.com/wang7/p/10138011.html
Copyright © 2011-2022 走看看