二. 变量-基本数据类型

变量

具有名称和特定规格的容器

基本类型

类型 符号 长度 范围 默认值
整数型 byte 1字节 -128 - 127 0
整数型 short 2字节 -32768 - 32767 0
整数型 int 4字节 -21亿 - +21亿 0
整数型 long 8字节 -231-(231-1) 0
浮点型 float 4字节 0.0
浮点型 double 8字节 0.0
字符型 char 2字节 ''
Boolean型 boolean 1字节 false | true false

整数型

注:

byte a = 1;//编译通过
long b = 123;//编译通过
long c = 99999999999;//编译失败
long d = 99999999999L;//编译通过
long e = 1111;//编译通过
double f = 1.1F;//编译通过
float g = 1.1;//编译失败

理解:

  • 字面值(Iiteral value,也称直接量)整数,初始类型都是int,字面值小数,初始类型都是double
  • 依靠字面值进行赋值操作时
    • 整数型,会进行向上或向下的自动类型转换
    • 浮点型,只会进行向上的自动类型转换

进制数

  • 二进制 0b11111
  • 八进制 01234567
  • 十进制 123459
  • 十六进制 0x123abcdf
int a1 = 0b111;//二进制
int a2 = 0123;//八进制
int a3 = 123459;//十进制
int a4 = 0x123fa;//十六进制

原反补码

计算机以二进制数的补码形式保存所有的整数,
正数

原反补码都相同

负数

原反补码不同

负数补码计算规则:

  1. 原码 -> 反码 符号位不变,其他位取反
  2. 反码 -> 补码 反码+1
  3. 特殊:规定 -1000 0000 为 -128

二进制数的格式

  1. 其二进制数的保存格式,根据其字节长度(x64系统,一个字节长度为8位),保存的二进制数的长度为字节长度*8,比如int的数据长度就是 4*8=32位。
  2. 其二进制数的第一位是符号位,符号位为0,是正数,符号位为1是复数,符号位参与数字的运算。

浮点型

Java中的浮点数都是用科学计数法表示的,因此在表示数据时可能会发生精度丢失的问题,有符号位, ,三个类型。

double a = 12/0.0;//结果为正无穷,
double b = -12/0.0;//结果为负无穷,
double c = 0/0.0;//结果为NaN;
int d = 1/0;//抛出 除以0 异常
//负无穷=负无穷,正无穷=正无穷,NaN不等于任何数

数值中使用 下划线(_)不影响机器对数值的读取,且便于识别数值的位数。

  • var使用方法
    根据为其赋值的对象(变量)的类型,决定var的类型。
    • 避免使用的情况:
      • 该变量由方法的返回值赋值
      • 该变量的作用范围比较广

类型转换

是7种数值相互转换
boolean不能转换为其他任意基本类型

自动类型转换

表达式中的自动类型转换

转换方向:
: byte、short、char ->int ->long ->float -> double

byte、short、char、字面值之间的相互运算,结果的类型

  • 有字面值参与运算,结果为字面值类型
  • 无字面值参与运算,结果为int型
  • 当运算符为 +=|-=|*=|\=时,表达式类似于
short a =1;
a += 1;
a = (short)(a + 1);

其他情况下,结果类型自动提升运算式中最高的类型

思考:

7\2结果为啥是3;
7\2.0结果为啥是3.5;

直接量赋值中的自动类型转换

直接量:
三类八种,可以在程序中显示的表示的值
种类 名称 格式
基本类型 int int a=100
基本类型 long long l =100L
基本类型 float float f = 1.0F
基本类型 double double d = 1.0
基本类型 char char c = '汉'
基本类型 boolean boolean b = false
字符串 String String s = "李华"
null类型 null

直接量赋值中的自动类型转换:

  • 支持向上自动类型转换

    • char ->int -> long->float ->double
  • int和char的直接量的其他转换(内存不溢出的条件下)

    • int ->byte short char
    • char -> short byte

强制类型转换

通过在对象之前加圆括号进行强制类型转换。

可能出现的问题:

  • 精度丢失
  • 容量溢出
  • 类型不匹配,抛类型转换异常
int a = (int)1.1;`//精度丢失
byte b = (byte)200;//容量溢出
posted @ 2020-07-17 12:09  度亚  阅读(116)  评论(0)    收藏  举报