2019独角兽企业重金招聘Python工程师标准>>>

本篇博文主要介绍 java 基础数据类型、基本类型的数据转换、自动装箱拆箱机制。

1. 基础数据类型

  1. 整型

    • 整型包含 byte(1字节)、short(2字节)、int(4字节)、long(8字节)

    • 需要注意的是,如果直接将一个较小的数赋值给 byte 或者是 short 的话,系统会自动把该数值当成 byte 或者 short 类型处理:

      byte a = 56
      
    • 当使用 long 类型时,需要在后面加上一个 L,如果没有的话,仍然当成 int 类型。例如,下面的代码就会报出编译错误:

      long bigValue = 999999999999
      
    • JDK7 新增了对二进制整数的支持,二进制的整数以 0b 或者 0B 开头,如:

      int binVal = 0b10000000000000000000000000000011
      

      需要注意的是,所有数字在计算机底层都是以二进制形式存在的,并且是以补码的形式保存所有整数。当我们要计算一个二进制整数的值时,需要将补码转换为原码。他们之间的关系是:正数的原码和补码完全相同,负数的补码是其反码加 1;反码是对原码按位取反,只是最高位(符号位)保持不变。例如,上述数值表示补码,其反码为 10000000000000000000000000000010 ,其原码为反码取反 (符号位不变)11111111111111111111111111111110 ,为 -2147483645。

  2. 浮点型

    • double(8字节)
    • float(4字节),如果需要使用 float 时需要在后面添加一个 F 或者 f。由于系统默认把一个浮点型归为 double 类型,因此如果不加 F 或者 f 的话,会产生编译错误。
  3. 字符型

    • char,2字节,可以表示中文
  4. 布尔型

    • boolean,1字节

2. 基本类型的类型转换

2.1 自动转换

基本类型表示范围小的数可以向基本类型表示范围大的数进行自动类型转换:

byte --> char、short --> int --> long --> float --> double

2.2 强制转换

强制类型转换时容易出现溢出的情况,例如:

int iValue = 233;
byte bValue = (byte)iValue;
System.out.println(bValue);    // 结果为 -23

在上述例子中,iValue 用二进制表示为 00000000000000000000000011101001。当强制转换成 byte 类型时,只能取后八位,即 11101001,二进制数是补码,我们把它转换为反码为 11101000,转换为原码为 10010111,此数值表示 -23。

2.3 表达式类型的自动提升

// 下面的代码会出现编译错误
short sValue = 5;
sValue = sValue - 2;

3. 自动装箱拆箱

自动装箱就是将基本数据类型转换为包装类型;拆箱就是把包装类型转换为基本数据类型,以 Integer 类型为例:

public class Test{public static void main(String[] args){Integer i = 20;int n = i;}
}

通过反编译 class 文件之后得到如下内容:

**可以看出,在自动装箱的过程中,调用的是 Integer.valueOf 方法,而在自动拆箱的过程中调用的 Integer.intValue 方法。**其他的包装类也是类似。有了上面的基础,我们来看看这段代码的运行结果:

public class PackAndUnbox {public static void main(String[] args) {Integer i1 = 100;Integer i2 = 100;Integer i3 = 200;Integer i4 = 200;System.out.println(i1 == i2);System.out.println(i3 == i4);}
}

有上面所说的知识点可以知道,这四个变量的定义都会自动装箱,即调用 Integer.valueOf 方法。那我们现在来看一下 Integer.valueOf 方法的源码:

 public static Integer valueOf(String s) {return Integer.valueOf(parseInt(s, 10));}public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
}

从源码可知,自动装箱时,当数值在 [low,high] 之间时(通过查看源码此范围为 -128,127),该数值可以直接由 IntegerCache.cache 数组生成,而且该数组由 static final 修饰,因此返回的对象应该是相等的。由此可以得出,上面程序的运行结果如下:

true;
false;

当其他包装类自动装箱时,如果要判断两个对象是否相等,判断的依据也是各个包装类的 valueOf 方法,这里就不再继续展开,详细的大家可以自行去查看源码或者查阅网上的博客,就比如这 一篇。

转载于:https://my.oschina.net/firepation/blog/3005329

java核心基础 --- 基本数据类型相关推荐

  1. 欢迎大家参加,Java核心基础快速总结与增强免费培训

    此次培训糅合了当今最新的Java思想.Java技术,以及众多的Java新特性.为期半个月,半个月时间内带领大家全面学习Java核心基础.面向对象.设计模式.J2SE6新特性.Java反射.代理.注解. ...

  2. 【JAVA SE】第二章 Java语法基础、数据类型、基本类型的字面值、基本类型的类型转换和运算规则

    第二章 Java语法基础.数据类型.基本类型的字面值.基本类型的类型转换.运算规则和标识符命名风格 文章目录 第二章 Java语法基础.数据类型.基本类型的字面值.基本类型的类型转换.运算规则和标识符 ...

  3. Java核心基础笔记(下)

    09 枚举类与*注解 一.枚举类的使用 1.枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类 2.当需要定义一组常量时,强烈建议使用枚举类 3.如果枚举类中只有一个对象,则可以作为单例模式 ...

  4. java夯实基础-基本数据类型

    学习任何一门语言,基础永远都是最重要的.本文测试java中八种基本数据类型(int,short,long,float,double,char,boolean,byte),包括其占用空间大小,能够存储的 ...

  5. 1.java的基础和数据类型

    一.学习要求 1.听课一定要全神贯注 2.课堂笔记,一定要自己总结,而且要有很严谨的逻辑关系.提纲很重要 3.作业不折不扣的完成,并且多完成 4.阶段项目一定要独立完成 5.每天早上由一位同学来进行早 ...

  6. Java核心基础知识汇总

    3.1.Java简介(了解) Java是一门编程语言,Java发展到今天,已经成为了一个真正意义上的语言标准,如果学习过(C.C++.Java)可以发现语法结构是很类似的,但是Java的标准指的是一种 ...

  7. Java的基础语法——数据类型

    数据类型 强类型语言 强类型定义语言 要求变量的使用要严格符合规定,所用变量都必须先定义后才能使用 一旦定义了一个变量,指定了某个数据类型,如果不经过转换,它就永远是这个类型 提高了安全性,但是速度比 ...

  8. java核心基础_Java核心基础 - 惊觉

    数据类型 分为两大类:基本数据类型.引用数据类型 基本数据类型: 数据类型特点byte8位 -128~127 short16位 -32768~32767 int32位 -2147483648~2147 ...

  9. 关于java的基础--基本数据类型以及循环

    一.基本数据 1,基本数据类型 Java数据类型包括:基本数据类型(原始类型),引用类型 String表示字符串,他修饰的只能存放字符串类型的数据 声明变量的语法:访问修饰符 类型 变量名 基本数据类 ...

最新文章

  1. grep,egrep及元字符和posix字符集
  2. new操作符到底干了什么?
  3. 浏览器安全检查己通过_小米薄荷浏览器URl欺骗漏洞(CVE-2019-10875)的安全修复被绕过...
  4. 网站产品设计应避免的7个误区
  5. [深度学习] 一篇文章理解 word2vec
  6. SSH整合jar包下载
  7. PHP realpath() 函数
  8. android让图片旋转动画,利用RotateAnimation旋转图片的问题 - 移动平台 / Android
  9. 一千本免费电子书(建议长期保存)转的-用迅雷下载
  10. 神奇的Tom猫(Tomcat)
  11. Arduino 使用 LCD1602 显示屏IIC驱动
  12. iOS登陆密码加密-HMAC
  13. history.back(argu);
  14. C++[缺省参数]的理解
  15. C++时间日期的处理ctime
  16. 精读《Prisma 的使用》
  17. 一个前端er写在2015年末的话
  18. 巧妙下载校VOD电影
  19. hudson插件开发入门
  20. 微课php平台,微课在PHP课程教学中的应用

热门文章

  1. html5直播api,HTML5 VideoAPI,打造自己的Web视频播放器
  2. php 7.0 特性,PHP 7.3比PHP 7.0快22% 即将进入特性冻结阶段
  3. c+安装+mysql+服务器端_centos7安装JDK1.7+tomcat7+mysql5.5
  4. 2020年研究生入学考试991考试大纲
  5. 重新安装Jenkins
  6. 『学了就忘系列』Linux基础命令 — 搜索操作相关命令
  7. 测试工程师职业素养:懂得拒绝无效工作
  8. 【讨论】测试工程师能否作为一份终生职业?30岁+怎么办?
  9. 关闭自动降频 linux,在Deepin系统下CPU不能自主降频的两种解决方法
  10. 航天生物计算机新能源你对哪个领域的课,写作《语言简明》课件.ppt