• 基本数据类型




    关于java的类型,这里讲解基本类型,引用类型较复杂,分开来讲,那么开始把,基本类型有8种:

    • 整数类型:btye、short、int、long
    • 浮点类型:float、double
    • 字符类型:char
    • 布尔类型:boolean

    他们占用的字节数及其默认值如下:

    数据类型 字节数 默认值
    byte 1 0
    short 2 0
    int 4 0
    long 8 0
    float 4 0.0
    double 8 0.0
    char 2
    boolean 1 false
    引用类型 4 null

    引用类型统一4字节,存对应的地址


    注意:

    整形默认int、浮点默认double,所以注意使用,eg:

    long a  = 10000000000;
    float b = 1.2;
    //上面代码都会报错的,应改为:
    long a = 10000000000L;
    float b = 1.2f;
    

    创建变量,是申请内存来存储值,分配的内存只能存兼容该类型的数据,小类型主要用来节省空间


    自动类型转换:

    • 不能对boolean类型转换
    • 不能把对象类型转换成不相关的对象类型
    • 大容量转小容量必须使用强转
    • 转换溢出或损失精度

    隐含强制转换:

    • 整数默认int
    • 浮点默认double

    浮点型损失精度:

    • 通常是差值的绝对值小于一个很小的数

      • if ( Math.abs(x - y) < 0.00001 )	//这样二者才默认相等
        
    • 十进制0.1转换成二进制是无限循环,保存在存储器上会截取损失精度


    一个char保存一个Unicode字符,Java内存中总是用Unicode表示字符,即英中字符都是用一个char表示


    **四舍五入**

    (int)(1.2 + 0.5)


    布尔的短路运算

    boolean result = 2 > 1 && (1 / 0 > 0);
    // 布尔运算的表达式能提前确定结果,则后续的计算不再执行,上面不报错
    

    包装类型

    Java中的基本数据类型没有方法和属性,而包装类就是为了让这些拥有方法和属性,实现对象化交互。主要作用如下:

    • 集合不允许存放基本数据类型,用包装类作为对象就可以传入
    • 使基本类型有了属性,如最大值、最小值、所占位数等
    • 使之有了实用的对象操作,如类型转换、进制转换

    JVM会自动维护八种基本类型的常量池,int常量池中初始化-128~127的范围,所以直接赋值时是相等的,而new出来是不等的

    Integer i1 = 127; 
    Integer i2 = 127; 
    System.err.println(i1 == i2); //true
    
    Integer i3 = new Integer(10);
    Integer i4 = new Integer(10s);
    System.err.println(i3 == i4); //false
    

    赋值是有返回值的,赋什么值,就返回什么值,if()里面应该用boolean而int不能转报错

    int x = 5;
    int y = 10;
    if(x = y)
    	System.out.println(“Not equal”);
    else
    	System.out.println(“Equal”);
    

    操作数都为:byte、short、int 、char,两个数都会被转换成int类型,并且结果也是int类型,但final修饰就不会向上转型了

    byte b1 = 1,b2 = 3,b3;
    
    final byte b4 = 4;
    
    b4 = b1 + b2;
    
    b3 = b1 + b2//报错,后者转为整形,而b3还是为byte
    

    基本型和基本型封装型进行“==、+=”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true

    int a = 220;
    Integer b = 220;
    System.out.println(a == b);//true
    

    自动拆箱装箱

    装箱:Integer.valueOf(int i) 返回Integer变成对象
    
    拆箱:Integer.intValue 变成基本类型,返回int
    

    两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true

    Integer a = 1;
    Integer b = 2;
    Integer c = 3;
    System.out.println(c.equals(a + b)); //true
    

    Switch支持的类型:

    • 基本数据类型:int,byte,short,char
    • 基本数据类型封装类:Integer,Byte,Short,Character
    • 枚举类型:Enum(JDK 5+开始支持)
    • 字符串类型:String(JDK 7+ 开始支持)

    包装类的缓存:
    该缓存建立在自动装箱基础上,如果是直接new的话就不起作用,当包装类加载时内部会初始化一个缓存数组,如果数值在缓存范围内会直接返回缓存数组的对象,而不会新建对象

    • Boolean:(全部缓存)
    • Byte:(全部缓存)
    • Character(<= 127缓存)
    • Short(-128 — 127缓存)
    • Long(-128 — 127缓存)
    • Integer(-128 — 127缓存)
    • Float(没有缓存)
    • Doulbe(没有缓存)

    互转:

    • 字节/字符数组 --> 字符串 new String(byte/char[] arr)

    • 字符串 --> 字节数组 getBytes()

    • 字符串 --> 字符数组 toCharArray()

    • 基本类型 --> 字符串 String.valueof()

    • 字符串 --> 基本类型 包装类.parseXXX()

    • 十进制 --> 二进制 Integer.toBinarySting(num)

    • 基本类型/字符串 --> 包装类 包装类.valueof()

    • 包装类 --> 字符串 包装类实例.toString()

    • 包装类 --> 基本类型 包装类实例.XXXValue();


    **初始值:** 成员变量才会有初始值,局部变量必须先赋值才能编译通过
    **运算符:** - &&等一对的具有短路功能,即前面能判断结果就不判断后面的 - == 和 === 前者相对相等,1 == ‘1‘,不同类型会自动转换 ;后者绝对相等,需要类型也相等

  • 相关阅读:
    VC++SDK编程——字体及位置示例
    VC2008以资源形式实现多语言版本(非Unicode) .转
    跟着编程之美学算法——最长递增子序列(转)
    跟着编程之美学算法——最长公共子序列
    MFC的多国语言界面的实现
    随意输入N个英文字符,找出其中最长连续的排列。
    C++读写EXCEL文件方式比较 .
    操作EXCEL和符号分隔文本的类CSpreadSheet .
    每个程序员都必读的12篇文章
    VC项目配置详解
  • 原文地址:https://www.cnblogs.com/Howlet/p/12251072.html
Copyright © 2020-2023  润新知