java中的基本类型转换,数据溢出原理

Baby-Lily      2022-05-02     419

关键词:

java中的数据类型

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

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

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

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

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

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

强制类型转换:

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

在进行类型转换时:

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

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.如果遇到其他的类型转换,也采用类似的处理方法。

 

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

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

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

 

字符运算的类型转换

我们来看如下的代码

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

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

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

 

深入浅出java中的包装类

前阵子,我们分享了《Java中的基本数据类型转换》这篇文章,对许多粉丝还是有带来帮助的,今天讲一下Java包装类的的由来,及自动装箱、拆箱的概念和原理。什么是包装类型Java设计当初就提供了8种基本数据类型及对应的8种... 查看详情

java中基本数据类型byte的溢出问题

Java中基本数据类型byte的溢出问题问题源于:https://www.cnblogs.com/HuoHua2020/p/12326631.html定义两个byte类型的数据,将其之和赋值给一个新的byte类型数据byteb1=1;byteb2=2;byteb=(byte)(b1+b2);System.out.println(b);此时结果为3,与预期一致byte类型的... 查看详情

java--基本数据类型的转换(自动转换)

...类与派生类间的造型等,随处可见类型转换的身影。Java中的类型转换在Java编码中具有重要的作用。首先,来了解下数据类型的基本理解:数据是用来描述数据的种类,包括其值和基于其值基础上的可进行的操作集合。  Java中... 查看详情

java--java中的基本数据类型以及对应的包装类

基本数据类型序号数据类型长度(位数)默认值1byte(整数型)802short(整数型)1603int(整数型)3204long(整数型)6405float(浮点型)320.06double(浮点型)640.07char(字符型)16/u0000008boolean(布尔型)1false基本数据类型在类型转换中默认----->... 查看详情

java基本数据类型及相互间的转换

...2.比较他们的字节数备注:1字节(Byte)=8位(Bit)3.转换中的知识点java中整数类型默认的int类型;小数类型默认的double;char可以当做一中特殊的整数类型;int无法转换为boolean;小数类型转为整数类型,小数可能被舍弃,所有出... 查看详情

基本数据类型和对象的区别

...dquo;引用”的概念,基本数据类型都是直接存储在内存中的栈上的,数据本身的值就是存储在栈空间里面,Java语言里面八种数据类型是这种存储模型;(2) 引用类型的存储原理:引用类型继承于Object类(也是引用类型)都... 查看详情

java基础:java基本数据类型详解(代码片段)

1.java基本数据类型java有八种基本数据类型:4种整型:byte,short,int,long2种浮点型:float,double(3.14F位浮点型,没有F默认为double)一种字符型:char一种boolean型:boolean基本数据类型... 查看详情

为啥 Hadoop 中的自定义数据类型会发生溢出失败

】为啥Hadoop中的自定义数据类型会发生溢出失败【英文标题】:whyspillfailurehappensforCustomDataTypeinHadoop为什么Hadoop中的自定义数据类型会发生溢出失败【发布时间】:2014-10-2513:00:03【问题描述】:在hadoop中,我正在编写我的自定义... 查看详情

解密java中的类型转换问题

众所周知Java中的数据类型是强数据类型,基本数据类型之间的转换尤其固定的规则,当数据宽度比较窄的数据类型(如int)转换成数据类型比较宽的数据类型时(如double),则窄的数据类型会加宽,可以完成自动类型转换,这... 查看详情

java基本数据类型转换

一:Java的基本数据类型和引用数据类型1:基本数据类型2:引用数据类型二:基本数据的类型转换基本数据类型中,布尔类型boolean占有一个字节,由于其本身所代码的特殊含义,boolean类型与其他基本类型不能进行类型的转换(既不能... 查看详情

java基本数据类型转换

一:Java的基本数据类型和引用数据类型1:基本数据类型2:引用数据类型二:基本数据的类型转换基本数据类型中,布尔类型boolean占有一个字节,由于其本身所代码的特殊含义,boolean类型与其他基本类型不能进行类型的转换(既不能... 查看详情

java核心:java中的装箱和拆箱

一、为什么需要装箱和拆箱?  基础数据类型是数据,不是对象,也不是Object的子类。Java为每种基本数据类型都提供了对应的包装器类型。装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为... 查看详情

java中的包装类

...型都对应了一种包装类。java是纯面向对象的语言,在java中的一切东西都可以用对象的形式表示,包括java中的基本数据类型。包装类中除了Integer和Character外,其他的包装类都是以java中的基本数据类型的首字母大写命名的。 &... 查看详情

java之使用integer类中的parseint()方法将字符串转换为基本数据类型

import java.util.*;public class SystemInfo{    public static void main(String[] args)    {       查看详情

java大神字符串的转换基本数据类型

1.字符串转换为数字java.lang中的Integer类调用其类方法publicstaticintparseInt(Strings)可以将由“数字”字符组成的字符串,比如“876”转换为int数据类型,例如:intx;Strings="876";x=Integer.parseInt(s);类似地,使用java.lang包中的Byte、Sho... 查看详情

java基本数据类型与类型转换

Java基本数据类型与类型转换文本关键字:8种、基本数据类型、整数类型、浮点类型、字符类型、布尔类型一、基本数据类型1.概述在Java中,所使用到的类型可以分为两大类,一类是基本数据类型,一共有8种,包含:整数,小数... 查看详情

java中的强制类型转换是如何转换的?

3天后投票选最佳答案java中数据类型的强制转换是通过强制转换语句完成的,强制转换语句的格式为“目标数据类型 变量=(目标数据类型)数据;”。下面给出例子:1、定义两个字节数据类型a、b、c,分别赋予1和2和a+b的值,... 查看详情

java基本数据类型,标识符语法,基本数据类型强制转换

JAVA基本数据类型,标识符语法,基本数据类型强制转换(学习资料bilibili狂神)复习publicclassone1{  publicstaticvoidmain(String[]args){    //这是一个exercise    //复习,注释,基本数据类型,标识符语法,基本数... 查看详情