Java基础 Day03

Java基础 Day03

总结

  1. 数据类型
  2. 数据类型之间的转换
    1. 自动转换:小转大
    2. 强制转换:大转小
      1. 可能有损失
        1. 整型之间转换的损失:仅截取指定的2进制位数
        2. 浮点型转整型的损失:小数点之后的内容损失
  3. Java的内存
  4. 运算符
    1. 算数运算符
    2. 赋值运算符
    3. 关系运算符
    4. 逻辑运算符

数据类型

Java是一门数据类型的语言。

  • 当声明一个变量时,必须指定变量的数据类型
  • 变量的类型一旦被声明,则不可改变,只能将变量的值转换成其他数据类型,赋值给新的变量

1. 基本数据类型

四类(整型、浮点型、字符型、布尔型)八种

  • 整型(4种)

    • byte 字节型 1字节 -128~127 -27~27-1
    • short 短整型 2字节 -215~215-1 -32768~32767
    • int 整型 4字节 -231~231-1
    • long 长整型 8字节 -263~263-1
    • 注意:
      • 整数直接量默认是使用int类型来存储,最常用的整型也是int类型;
      • 可以指定使用long类型来存储直接量,在直接量后边添加L或者l后缀,指定了使用long类型来存储该直接量;
    • 整型的数据存储方式:
      • 底层的二进制采用补码形式保存
      • 原码:
        • 在数字二进制的基础上添加符号位,符号位为数字最高位(最左侧1位)为符号位,0表示正数,1表示负数
        • 例如:5(10)=101(2),-5(10)=1101(2)
      • 反码:
        • 正数的反码与原码相同,负数的反码除符号位外逐位取反
        • 如:原码10010(这是负数)= 反码11101
      • 补码:
        • 正数的补码与原码相同,负数的补码是在其反码的基础上末位加1
        • 如:原码10010(这是负数)= 反码11101=补码11110
  • 浮点型(2种)

    • float 单精度浮点型 4字节
    • double 双精度浮点型 8字节
    • 注意:
      • 浮点数直接量默认是使用double类型来存储;
      • 可以指定使用float类型来存储浮点数直接量,在浮点数直接量后边添加F或者f后缀,指定了使用float类型来存储该直接量;
      • 最常用的整型是double类型;
      • double类型也可以在直接量后边加D或d来明确;
    • float和double都可能存在精度的缺失
  • 字符型(1种 )

    • char 字符型 2字节
  • 布尔型(1种)

    • boolean 布尔型 1字节
      • 只有true和false两个值

2. 引用数据类型(复杂数据类型)

类 接口 数组 枚举等

注意:

  • 字符串类型不是基本数据类型,是引用数据类型
  • 除了8种基本数据类型以外,其他都是引用类型
  • 八种基本数据类型都是关键字全部小写
  • 关于数据类型的面试题,一定要注意回答的逻辑性、条理性

数据类型的转换

1. 自动数据类型转换

  • 数值型
    • 从小到大自动转换
    • byte-·> short -> int -> long -> float -> double
    • 整型 -》浮点型 在整数值后直接加.0
  • 字符转数值型
    • char->int->long->float->double
    • 根据码表将字符对应的ASCII值赋值给int类型

2. 强制数据类型转换

从大转小,且大类型实际存储的数据是在小类型的范围之内的;

  • 格式:(type)数据值;
  • 将数据值强制转换为小括号中的数据类型

注意:

  • 浮点型转整型则小数部分全部舍弃;精度损失
  • 整型大转小进行强制类型转换,底层做法从最低位开始获取强转为的类型对应的字节数
  • 数据类型的转换同样适用于引用数据类型

Java内存

  • 内存:
    • 内存的数据读写速度快:DDR4单通道内存,速度约22GB/S
    • 无法持久化保存数据:断电则数据丢失
    • 一个程序启动后,操作系统会为该程序分配指定的内存空间,该程序运行中的所有临时数据,都保存在被分配到的内存空间中。当程序关闭时,操作系统会回收这部分内存空间,其中的数据会丢失。
  • 硬盘:
    • 可以持久化的保存数据,关闭电源再重启,数据依旧存在
    • 数据读取速度远低于内存:机械硬盘读速度约150MB/s,固态硬盘读速度 600MB/s~1GB/s
  • 执行Java程序:
    • 程序运行起来实际是在内存中作为运算
    • 从内存的角度来说,可以将变量称为存储数据的最小的容器;
    • 当程序开始运行,会分配相应的内存空间用于执行程序,当程序执行完成,所占用的内存空间会立马释放;

运算符

算术运算符 赋值运算符 关系运算符 逻辑运算符 三目运算符(三元表达式) 位运算符

算术运算符

  • 基本算术运算符:+ - * / %

  • 二元运算符

  • +:

    • 数值型之间可以直接进行求和运算
      • 整形+整形=整形
      • 整形+浮点型=浮点型
    • 字符串拼接
      • +号遇到字符串,则会将字符串和其他数据类型的内容拼接起来,产生一个新的字符串;
      • 从左向右依次执行
  • 数据类型的问题:

    • 两个元素的数据类型一致,结果和元素保持一致;

    • 两个元素的数据类型不一致,结果的数据类型和其中大的数据类型保持一致;

    • 整形和浮点型的运算结果是浮点型

    • 注意:

      • byte short char在运算时会自动提升为int类型

        byte b3=b1+b2;  // 错误
        
    • /:

      • 整型/整型结果为整型(整除),直接舍弃小数部分
      • 运行时异常:除数不能为0
      • 如果被除数或除数为浮点型,则结果为浮点型
      • 正浮点数/0:Infinity(无穷大)
      • 负浮点数/0:-Infinity(无穷小)
      • 0.0/0:NaN(Not a Number)非数字
    • %:模 余

  • 扩展的算术运算符:++ –

    • ++:自增运算符

    • –:自减运算符

    • 是2个一元运算,用于变量的自增1和自减1

    • 注意:

      • ++ – 作用于变量,不能作用值和常量

      • ++ 可以在变量的前边也可以在变量的后边

      • 当++参与运算,++在前在后有区别:

      • 如果++在变量的后边,先使用变量原来的值,之后再让变量+1;

        • 如果++在变量的前边,先让变量+1,之后再使用变量的值;
      • – 同理;

赋值运算符

格式: 变量名 = 值

  • 注意:

    • = 基本赋值运算符 没有比较的含义
    • 优先级是最低的:先执行等号右边的所有运算,最后再将结果赋值给等号左边的变量
  • 扩展的赋值运算符: += -= *= /= %=

    • 变量 += 值或变量; i+=10;
    • 等同于 变量=变量+值或变量; i=i+10;
    • 运算规则:使用左侧变量的值和右侧的值进行求和将结果重新赋值给左侧变量;

关系运算符

  • 包括:>(大于) >=(大于等于) <(小于) <=(小于等于) == (等于) !=(不等于)

  • 属于2元运算符

  • 结果一定是boolean,要么为true 要么为false

注意:

  • 不支持比较运算符的连用 (18< a1 <33)

逻辑运算符

针对boolean做运算,运算结果也是boolean类型

  • & 且

    • 元素1 & 元素2:

      true&true=true

      true&false=false

      false&true=false

      false&false=false

    • 总结:有false则为false,全true为true

  • | 或

    • 元素1 | 元素2:

      true | true=true

      true | false=true

      false | true=true

      false | false=false

    • 总结:有true则true,全false为false

  • ! 非

    !true == false

    !false == true

  • ^ 异或

    • 相异为true,相同为false

    • true^true=false

    • true^false=true

    • false^false=false

  • && 双与 短路与

    • 如果&&左边的值为false,则右边不再计算,结果必然为false;
    • 换一种理解思路:只有当左边的条件符合时,才会继续进行右边的判断
    • if(str!=null && str.length!=0 )
    • 注意:& 和&&最终的结果一定是一致的;
  • || 双或 短路或

    • 如果||左边的值为true,则右边不再计算,结果必然为true;
  • 注意: | 和||最终的结果一定是一致的;

  • && ||的优点:可以提高程序的执行效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值