Java中数据类型认知、转换与数值提升问题

一、Java中的8种基本数据类型

(一)整型变量int

  1. 基本语法:int 变量名 = 初始值;(局部变量一定要初始化)
    eg:int a = 10;
  2. 字节:4个字节(即:占二进制32位,其中第一位是符号位)
  3. 包装类:Integer
  4. 取值范围:-2^31 ~ 2^31(-2147483648 ~ 2147483647)
   int a = 10;//局部变量一定要初始化
   System.out.println(Integer.MAX_VALUE);//打印最大值
   System.out.println(Integer.MIN_VALUE);//打印最小值
   
   int max = Integer.MAX_VALUE+1;//打印出最小值
   System.out.println(max);
  
   int min = Integer.MIN_VALUE-1;//打印出最大值
   System.out.println(min);

在这里插入图片描述

(二)长整型变量long

  1. 基本语法:long 变量名 = 初始值;
    eg:long a = 10L;
  2. 字节:8个字节(占二进制位64位,其中第一位是符号位)
  3. 包装类:Long
  4. 取值范围:-2^63 ~ 2^63-1
   System.out.println("最大值:" + Long.MAX_VALUE);//打印long最大值
   System.out.println("最小值:" + Long.MIN_VALUE);//打印long最小值
  注意事项:1.上述打印汉字,其中”+”是拼接的意思
          2.任何类型数据和字符串拼接结果都是字符串
          3.两个整型中间的加号表示相加    
          4.符号位不是数值位
          5.符号位的0代表正数,1代表负数 
          6.剩下的31/63位代表2^31或2^63种状态(包含0)
   int b = 10;
   int a = 20;
   System.out.println(b + a);//加号表示相加
   System.out.println("hhh" + a + b);//两个加号都表示拼接
   System.out.println("hhh" + (a + b));//带括号表示相加结果再拼接

(三)双精度浮点型变量double

  1. 基本语法:double 变量名 = 初始值;
    eg:double b = 13.2;(默认该处的小数为双精度类型小数)
  2. 字节:8个字节(如何存储需要研究浮点数在内存中的存储)
  3. 包装类:Double
  4. 取值范围:4.9E-324 ~ 1.797693134863157E308(了解)
   int a = 10;
   double b = 20.0;//必须有一个double类型除法才有结果
   System.out.println(a/b); 
 
   double num = 1.1;
   System.out.println(num*num);//执行结果:1.2100000000000002
  注意事项:1.两个整型进行运算无法得到double类型
          2.任何小数都有精度,能精确表示小数点后几位
          3.小数没有精确值,只有一个范围
          4.小数和整数在内存中存储方式不一样
          5.若要弄清楚1.1*1.1结果末尾为什么有2,需要了解浮点数在内存中的存储(建议不用管)
          6.写项目时,一般小数选择使用double,而不是float
          7.小数没有精确值,只有一个范围

(四)单精度浮点型变量float

  1. 基本语法:float 变量名 = 初始值;
    eg:float f = 12.3f(F);(大小写都可以)
  2. 字节:4个字节
  3. 包装类:Float
  4. 取值范围:不必了解
   float d = 12.3;//编译错误,Java不允许double类型的值直接赋给float

   float f = 12.3f;//执行结果:12.3
   System.out.println(f);

(五)字符类型变量char

  1. 基本语法:char 变量名 = 初始值;
    eg:char ch = ‘a’ ;(java中用单引号+单个字母表示字符字面值)
  2. 字节:2个字节
  3. 包装类:Character
  4. 取值范围:0 ~ 2^16-1(0 ~ 65535)(没有负数)
   char ch = 'a';
   System.out.println(ch);
   
   char ch2 = '滴';//一个汉字也占两个字节,执行结果:滴
   System.out.println(ch2);
   
   char ch3 = 97;//a的编码值为97,所以执行结果:a
   System.out.println(ch3);
  注意事项:1.计算机中字符本质上是一个整数,c语言中ASCII表示字符,Java中Unicode表示字符,因此一个字符占两个字节,表示的字符种类更多,包括中文
           2.char类型只是字符类型,不与数值类型混为一谈
           3.'a'和"a"意义不同,前者是字符常量,后者是包含字符a的字符串
           4.想要具体了解char类型,可以去了解Unicode编码机制

(六)字节byte

  1. 基本语法:byte 变量名 = 初始值;
    eg:byte b = 12;
  2. 字节:1个字节(占二进制8位)
  3. 包装类:Byte
  4. 取值范围:-2^7 ~ 2^7-1(-128 ~ 127)
   System.out.println(Byte.MAX_VALUE);//打印最大值
   System.out.println(Byte.MIN_VALUE);//打印最小值
   
   System.out.println(Byte.MAX_VALUE+1);//默认以整型进行打印,结果在整型范围内,所以执行结果:128

   byte b = Byte.MAX_VALUE+1;//结果出错,不兼容的类型,int转换到byte可能有损失
   System.out.println(b);
  注意事项:1.每一种数据类型,在给其赋值时一定不能超过其范围
           2.最后一个代码之所以不行,是因为左边是byte型,右边是int型,byte型变量不能赋值给int型(涉及问题:整型提升)

(七) 短整型变量short

  1. 基本语法:short 变量名 = 初始值;
    eg:short sh = 12;
  2. 字节:2个字节(占二进制16位)
  3. 包装类:Short
  4. 取值范围:-2^15 ~ 2^15-1(-32768 ~ 32767)表示范围小一般不推荐使用
   System.out.println(Short.MAX_VALUE);//打印最大值
   System.out.println(Short.MIN_VALUE);//打印最小值

(八) 布尔类型boolean

  1. 基本语法:boolean 变量名 = 初始值;
  2. 字节:没有明确大小
  3. 包装类:Boolean
  4. 取值范围:只有true和false两个取值
  5. boolean类型和int类型不能相互转换,不存在1表示true,0表示false的用法

二、Java中的引用数据类型

   (引用数据类型包括很多:类,String,数组,抽象类,接口,枚举......)

(一)字符串数据类型String

  1. 基本语法:String 变量名 = “初始值”;
    eg:String str = “Hello”;
    2.字符串 “ + ”表示拼接
    3.任何数据类型和字符串拼接结果都是字符串
   String str = "Hello";//执行结果:Hello
   System.out.println(str);
   
   //输出一个带双引号的Hello,需要用到转义字符
   String str = "\"Hello\"";//执行结果:"Hello"
   System.out.println(str);
   转义字符:1. \n 换行
            2. \t 水平制表符
            3. \' 单引号
            4. \" 双引号
            5. \\ 反斜杠

三、变量的相关细节

(一)变量的作用域:

  1. 该变量能生效的范围,一般为变量定义所在的代码块{}
  2. 本地代码块:定义在方法内的一个代码块

(二)变量的命名规则:

  1. 只能包括数字(不能开头)、字母(注意大小写)、下划线、$(该符号不允许使用)
  2. 变量名具有描述性,见者知意,不宜使用拼音,词性推荐使用名词
  3. 命名推荐“小驼峰法” eg:maxNum

四、常量

(一)字面值常量:eg:10 “abc” 1.0 ‘a’
(二)final关键字修饰的常量

   final int MAXNUM = 10;//执行结果:10
   System.out.println(MAXNUM);

   final int MAXNUM = 10;
   MAXNUM = 999;//执行结果:无法为最终变量maxNum分配值
   System.out.println(MAXNUM);

   final int MAXNUM;
   MAXNUM = 999;//执行结果:999
   System.out.println(MAXNUM);
  注意事项:1.常量只能被初始化一次,且使用时一定要记得初始化
           2.变量名最好大写
           3.常量在程序运行过程中不能发生修改

五、理解类型转换

(一)隐式类型转换:把一个小类型数据给一个大类型

   int a = 10;
   long b = a;//执行结果:10
   System.out.println(b);
   //此处发生了隐式类型转换

(二)显式类型转换:把一个大类型给小类型,需要进行强制类型转换

   long a = 10L;
   int b = a;//执行结果:不兼容,从long转换到int可能会有损失
   System.out.println(b);

   long a = 10L;
   int b = (int)a;要把一个long类型数据赋值给int类型,需要进行强制类型转换
   System.out.println(b);//执行结果:10
 
   byte d = 100; //执行结果:100
   System.out.println(d);
   
   byte d = 256;//数据超过byte取值范围,执行结果:不兼容,从int转换到byte可能会有损失
   System.out.println(d);
  注意事项:1.int和boolean不能相互赋值,他们是两种不相关的类型
           2.int字面值常量给byte赋值,数据必须在byte范围内
           3.大类型数据赋值给小类型数据一定要进行强制转换

(三)int 和String之间的相互转换

  1. int转成String
   int num = 10;
   String str1 = num + "";//方法一:利用字符串和任何类型拼接都是字符串进行强制转换
   System.out.println(str1);
  
   int num = 10;
   String str2 = String.valueOf(num);//方法二:调用valueOf方法进行转换
   System.out.println(str2);
  1. String转成int
   String str = "100";
   int num = Integer.parseInt(str);
   System.out.println(num);

   String str = "100a";
   int num = Integer.parseInt(str);//执行结果:出现异常
   System.out.println(num);

六、理解数值提升

  1. 对于小于4个字节的数据进行算数运算时,都会先提升为整型,再进行运算
    (提升原因:计算机的CPU通常按照4个字节为单位从内存中读取数据,为了硬件上实现方便,因此对于小于4个字节的类型都会先提升为整型,再参与计算)
   byte b = 10;
   byte c = 20;
   byte d = b + c;//执行结果:不兼容,从int转换到byte会有损失
   System.out.println(d);

   byte b = 10;
   byte c = 20;
   byte d =byte)b + c;//方法一:把右边强制转换成byte,执行结果:30
   System.out.println(d);
  
   byte b = 10;
   byte c = 20;
   int d = b + c;//方法二:把左边变成int,执行结果:30
   System.out.println(d);

因此相关问题如下:

   byte d = 127+1; //执行结果:出错,是因为右边发生了整型提升,将int赋值给byte不被允许
   int i = 2147483647+1//执行结果:-2147483648,左右都是整型,因此可以打印
  1. 不同类型的混合运算,范围小的会提升为范围大的(int和long混合运算,int会提升为long)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值