文档章节

java核心基础 --- 基本数据类型

firepation
 firepation
发布于 01/24 11:15
字数 1117
阅读 56
收藏 1

本篇博文主要介绍 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 方法,这里就不再继续展开,详细的大家可以自行去查看源码或者查阅网上的博客,就比如这 一篇

© 著作权归作者所有

firepation
粉丝 3
博文 24
码字总数 29749
作品 0
福州
程序员
私信 提问
《俗人笔记》之《Java基础语法上》

基础前言: 二进制: 十进制转二进制:使用除以2获取余数来算 二进制转十进制:按8421编码 字节: 最小的存储单位是字节,最小的信息单位是位(bit) 1B=8bit 1KB=1024B 依次类推 DOS命令 盘符...

钱无极
2018/12/10
0
0
Java开发每日复盘2018_0514

今天主要跟大家分享3个部分: 一、「Java的核心机制」 二、「Java命名规范」 三、「Java数据类型相关」 下面我们来一个一个的说: 「Java核心机制」 Java是一种强制面向对象的解释型语言(O...

ZeroOSTalk
2018/05/14
0
0
大数据开发培训:0基础学习Java编程语言有哪些知识点?

Java 技术通用、高效、具有平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网等,学习Java首先要知道学习知识点有哪些。在这就用加米谷大数据培训...

加米谷大数据
2018/07/25
2
0
阿里年薪50WJAVA工程师转大数据学习路线!

大数据有两个方向,一个是偏计算机的,另一个是偏经济的。你学过Java,所以你可以偏将计算机的。 Java程序员想转大数据可行吗?Java是全世界使用人数最多的编程语言。不少程序员选择Java做为...

JAVA丶学习
2018/04/25
0
0
大神教你JVM运行原理及Stack和Heap的实现过程

Java语言写的源程序通过Java编译器,编译成与平台无关的‘字节码程序’(.class文件,也就是0,1二进制程序),然后在OS之上的Java解释器中解释执行,而JVM是java的核心和基础,在java编译器和...

问题终结者
01/07
61
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
今天
6
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
8
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
5
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部