java 数据类型 变量

数据类型

数据类型占用内存(字节)取值范围
byte1-2^7 ~ 2^7-1
short2-2^15 ~ 2^15-1
int4-2^31 ~ 2^31-1
long8-2^63 ~ 2^63-1
float41.4E-45 - 3.4028235E38
double81.7976931348623157E308 ~ 4.9E-324
char265536 (看字符编码)
boolean1true | false

浮点数

  1. 表示
    Java 浮点数是采用了 IEEE 754 (IEEE二进制浮点数算术标准),任意一个二进制浮点数V可以为
    V = ( − 1 ) s × M × 2 E V = (-1)^s × M × 2 ^E V=(1)s×M×2E

    1. (-1)^s 表示符号位,当s=0,V为正数;当 s=1,V为负数.

       符号位:只有两个取值	0 或者 1,0代表正数,1代表负数。	
      
    2. M表示有效数字,大于等于1,小于2,但整数部分的1可以省略,也叫尾数(Mantissa)

      M 可以写成1.xx的形式,其中xxx表示小数部分.IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以
      被舍去,只保存后面的xx部分。比如保存1.0101的时候,只保存0101,等到读取的时候,再把第一位的1加上去。这样做的
      目的是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位舍去以后,等于可以保存24位有效数字			
      
    3. 2^E表示指数位(Exponent)

       E为一个无符号整数 (unsigned int)这意味着,如果E为8位,它的取值范围为0-255;如果E为11位,它的取值范围为
       0-2047.然而科学计数法中的E是可以出现负数的,所以 IEEE 754 规定,E的真实值必须再减去一个中间数,对于8位的E,
       这个中间数是127;对于11的E,这个中间数是1023。比如2^2的E是2,所以保存成 float 32位浮点数时,必须保存成 2+
       127 = 129,即 10000001
      
    4. 小例子:-58.2 在内存是怎么表示的

      	Integer.toBinaryString(Float.floatToIntBits(-58.2F));
      	// 可以使用 Java 11 jshell 进行输出该数
      	// $1 ==> "11000010011010001100110011001101"
      	
      	/*
      		1 10000100 11010001100110011001101
      		拆解     
      		第一位表示符号    1 表示为负数  
      		第二位 到 第8位   10000100 表示指数位 真实值为  -	0111 1111 为 0101
      		第十位 到 第32位  11010001100110011001101 表示尾数小数部分
      	*/
      
    5. E 还需要考虑下面2种情况:.

      1. E全为0,这时,浮点数的指数E等于 1-127 (或 1-1023),有效数字M不再加上第一位的1,而是还原0.xxx 的小数,这样做是为了表示 ±0,以及接近于0的很小的数字

        jshell>	Integer.toBinaryString(Float.floatToIntBits(-0F));
        // "1 00000000 00000000000000000000000
        jshell>	Integer.toBinaryString(Float.floatToIntBits(0F));
        // "0 00000000 00000000000000000000000		一般直接输出 0 
        
      2. E全为1。这时,如果有效数字M全为0,表示 ± 无穷大(取决于符号位 s );如果有效数字M不全为 0,表示这个数不是一个数(NaN)

        Integer.toBinaryString(Float.floatToIntBits(Float.POSITIVE_INFINITY)));
        // 11111111 00000000000000000000000	// 开头0会被省略
        Integer.toBinaryString(Float.floatToIntBits(Float.NEGATIVE_INFINITY)));
        // 1 11111111 00000000000000000000000
          	
        Float.POSITIVE_INFINITY
        // Infinity
        Float.NEGATIVE_INFINITY
        // -Infinity
        
  2. 取值范围

    jshell> Integer.toBinaryString(Float.floatToIntBits(Float.MAX_VALUE));
    // 0 11111110 11111111111111111111111	// 输出时 开头 0 会被省略
    jshell> Integer.toBinaryString(Float.floatToIntBits(Float.MIN_VALUE));
    // 1 输出时,前面0会被省略
    jshell>  Float.MAX_VALUE
    // 3.4028235E38
    jshell>  Float.MIN_VALUE
    //  1.4E-45
    

字符集

  1. ASCII (American Standard Code For Information Interchange,美国信息互换标准代码)
    ASCII 1967年初版,至1986年共定义了128个字符。
    ASCII 码,用一个字节来表示。

  2. Unicode (统一码、万国码、单一码)
    Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由16位来表示(2个字节),即:2 ^ 16 = 65536

  3. GB2312(信息交换用汉字编码字符集)
    GB2312 主要用于汉字处理以及通信。

  4. UTF-8(8位元,Universal Character Set/Unicode Transformation Format)
    UTF-8 是针对Unicode的一种可变长度字符编码。是对Unicode编码的压缩和优化,所以UTF-8 包含于Unicode,只是他不再使用最少使用2个字节,而是将所有的字符和符号进行分类;ascii 码中的内容用 1个字节保存、欧洲的字符用两个字节保存,东亚的字符用3个字节保存

    查看咱们的字符集

    jshell> import java.nio.charset.Charset
    
    jshell> Charset.defaultCharset()
    // GBK	支持简体中文和繁体中文 GB2312 是简体中文
    

变量

变量是通过内存分配并赋值的量,分为不可变变量和可变变量

  1. 定义
    int i = 6;  // 定义了一个 int(整型)类型的变量 i,并且赋值为6
    byte b = 6;
    short s = 6;
    long l = 6L;	// 在声明long类型时,后缀加上 L 或者 l(推荐采用大写)
    
    float f = 6.6F;	// 默认小数是 double 类型,声明float时 值得后缀加上 f 或 F(推荐采用大写)
    double d = 6.6;
    
    char c = 'G';	// 赋值给 char类型的变量,只能赋值为一个字符.
    
    boolean bool = true;
    
  2. 定义变量的规则
    1. 变量名字不能有空格。
    2. 避免使用关键字。如:class public static int
    3. 避免使用汉字
    4. 整体是驼峰命名,首字母小写。如 helloWorld
    5. $ 和 _ 可以到处使用
    6. 数字不能开头
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值