java中的数据类型

  java是一种强类型语言,在java中,数据类型主要有两大类,基本数据类型和引用数据类型,不同的数据类型有不同的数据存储方式和分配的内存大小。

  基本数据类型中,各数据类型所表示的范围也是不一样的,如下所示:

  由于在java中,整数默认是采用int型,浮点数默认采用的是double型进行存储,所以在定义long型和float型数据时,必须在数值后面加'l','L'和'f','F',如:

 long a = 1000l;
long b = 2000L;
float c = 3.14f;
float d = 3.14F;
 
java 中的数据类型转换

在java中,存在两种转换的机制,默认类型转换(隐式转换)和强制类型转换。默认类型转换的规则如下:

  • byte,short,char  -> int ->long ->float ->double
  • 当byte,short,char相互之间不能转换,它们参与运算首先将转换成int类型进行运算。

强制类型转换:

  • 目标类型  变量名 = (目标类型)(被转换的类型)

在进行类型转换时:

  1. 容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意。
  2. 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。
 #案例代码
byte a = 3, b = 4, c;
c = a + b;
c = 3+4;
#语句 c = a + b ;因为a和b是变量,不确定具体的值,所以默认使用的int进行存储,则运算的结果为int型,
赋值为byte型报错,编译失败。 #语句 c = 3 + 4;因为3和4都是常量,所以java在编译时期会检查运算结果是否超出byte类型的范围,
没有超过则可以赋值。

byte的存储范围是-128-127的整数范围,那么如果有如下语句:

byte  a = (byte)130;

结果会是多少呢?java是如何处理强制类型转换的溢出处理呢?

在计算机中,所有的数据都是存储的补码形式,那么130首先被当成int型存储,四个字节32位,它的补码如下:0000 0000   0000 0000   0000 0000    1000 0010,转换为byte类型,进行截取,高字节部分去除,保留低字节部分,得到转换为byte类型的补码为:1000 0010,我们将其转换为源码:补码(1000 0010)->反码(1000 0001)->原码(1111 1110)为-126,所以最后的答案是-126.如果遇到其他的类型转换,也采用类似的处理方法。

快速计算强制类型转换的截取问题

在佛罗赞的《计算机导论》(原书第二版)中介绍了大量的数据类型在计算机中的存储方式,非常推荐这本书作为计算机专业的入门数据。书里面就讲解了计算机是如何进行数据截取的,如下图:

如此计算,是不是快速多了呢!

字符运算的类型转换

我们来看如下的代码

 System.out.println('a');    #输出结果a
System.out.println('a'+1); #输出结果98
System.out.println("hello"+'a'+1); #输出结果helloa1
System.out.println('a'+1+"hell"); #输出结果98hello
System.out.println("5+5="+5+5); 输出结果5+5=55
System.out.println(5+5+"=5+5"); 输出结果10=5+5

在与字符串运算时,采用从左到右的运算顺序,类型转换时,向高精度进行转换。任何数据和字符串进行操作,结果都是字符串类型。但是要注意运算的顺序。

欢迎关注我的公众号,互联网式街头艺人!

Java中的基本类型转换,数据溢出原理的更多相关文章

  1. JavaSE基础(十)--Java中的基本数据类型转换

    Java中的基本数据类型转换 说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示. 重新温故了下原始数据类型,现在来解释下它们之间 ...

  2. Java中基本数据类型byte的溢出问题

    Java中基本数据类型byte的溢出问题 问题源于:https://www.cnblogs.com/HuoHua2020/p/12326631.html 定义两个byte类型的数据,将其之和赋值给一个 ...

  3. JSON(三)——java中对于JSON格式数据的解析之json-lib与jackson

    java中对于JSON格式数据的操作,主要是json格式字符串与JavaBean之间的相互转换.java中能够解析JSON格式数据的框架有很多,比如json-lib,jackson,阿里巴巴的fast ...

  4. 关于java中的hashcode和equals方法原理

    关于java中的hashcode和equals方法原理 1.介绍 java编程思想和很多资料都会对自定义javabean要求必须重写hashcode和equals方法,但并没有清晰给出为何重写此两个方 ...

  5. 关于Java中的基本数据类型转换

    Java中的基本类型有四种,其中整型分为byte.short.int.long,浮点型分为float.double,字符型char,布尔型boolean.8种类型的级别由低到高byte->sho ...

  6. Java中的Annotation(2)----Annotation工作原理

    Java中的Annotation(2)----Annotation工作原理 分类: 编程语言2013-03-18 01:06 3280人阅读 评论(6) 收藏 举报 上一篇文章已经介绍了如何使用JDK ...

  7. Java中double类型的数据精确到小数点后两位

    Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...

  8. Java中final修饰的数据

    目录 Java中final修饰的数据 有初始值的final域 final+基本数据类型 final+引用数据类型 final与static final 空白final域 final修饰的参数 基本数据 ...

  9. 彻底理解Java中的基本数据类型转换(自动、强制、提升)

    说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示. 重新温故了下原始数据类型,现在来解释下它们之间的转换关系. 自动类型转换 自 ...

随机推荐

  1. java基础小项目练习之1----3天做出飞机大战

    Shoot射击游戏第一天一. 关键问题(理论):1. 简述FlyingObject.Enemy.Award.Airplane.Bee.Bullet.Hero之间的继承与实现关系2. 简述Hero类构造 ...

  2. c# 如何读取web.config中的内容(ConfigurationManager)

    1.web.config中写入 <appSettings>    <add key="TokenQPark" value="http://localho ...

  3. proxy.go

    )     for {         select {         case <-otherSwitch:             complete <- true          ...

  4. 【cogs 775】山海经 ——Segment Tree

    题目链接:      TP 题解:   我数据结构真心是弱啊= =. 线段树好厉害啊,一直不会区间最大连续和,今天刚学习了一下233. 维护前缀最大和后缀最大,越界最大(?),再维护一个区间最大,瞎搞 ...

  5. h5区块链项目实战

    近来区块链一词很热门,网络上关乎其讨论也很多,这里就不解释了,毕竟几句话也是说不清楚的. 最近得空利用HTML5+css3+jQ开发了一个移动端的区块链项目,感觉界面.布局.效果还是ok的. 项目效果 ...

  6. Centos6.4 + mysql-5.6.38-linux-glibc2.12-x86_64.tar 实现mysql主从复制

    mysql安装方法:http://www.cnblogs.com/lin3615/p/4376224.html 用到的是两台服务器 主:192.168.1.106 从:192.168.1.69 1.在 ...

  7. 前端随笔 - JavaScript中的闭包

    前阵子重新复习了一下js基础知识,第一篇博客就以分享闭包心得为开始吧. 首先,要理解闭包,就必须要了解一个概念:作用域链. 作用域链 作用域代表着可访问变量的集合,变量分为全局变量和局部变量两种,在函 ...

  8. java游戏开发杂谈 - 游戏物体

    现实生活中,有很多物体,每个物体的长相.行为都不同. 物体存在于不同的空间内,它只在这个空间内发生作用. 物体没用了,空间就把它剔除,不然既占地方,又需要花精力管理. 需要它的时候,就把它造出来,不需 ...

  9. Python和Python解释器

    目录 Python介绍(了解) Python解释器发展史(了解) Python解释器(了解) CPython IPython PyPy Jython IronPython 安装Python解释器(掌握 ...

  10. .net core 中间件管道底层剖析

    .net core 管道(Pipeline)是什么? 由上图可以看出,.net core 管道是请求抵达服务器到响应结果返回的中间的一系列的处理过程,如果我们简化一下成下图来看的话,.net core ...