更详细的说明,请参考: Java 原生类型与包装器类型深度剖析,https://blog.csdn.net/justloveyou_/article/details/52651211

一. 原生类型与包装器类型

1Byte = 8 Bits

二. 自动转型与强制转型

精度(低1-高5)    
1 byte(1字节) Byte
short(2字节) Short
char(2字节) Character
     
2 int(4字节) Integer
     
3 long(8字节) Long
     
4 float(4字节) Float
     
5 double(8字节) Double
     
NA boolean(未定) Boolean

1、 自动转型

自动转型总原则:byte,short,char(同级)-> int -> long -> float -> double (由低精度到高精度)

1.1 由低精度到高精度的自动转换

具体可分为以下两种情形:

1)从位数低的类型向位数高的类型转换

byte b = 1;
char c = 1;
short s = 1;
int i = 1; c = b; // Error,同级
c = s; // Error,同级
s = c; // Error,同级
i = c; // OK

2) 从整型向浮点型的转换

int i = 1;
long t = 1;
float f = 1;
double d = 1; f = i; // Ok
f = t; // Ok
d = f; // Ok

1.2 运算符对基本类型的影响

具体可分为以下两种情形:

1) 当使用 +、-、*、/、%、==、>、< 等 等运算符对基本类型进行运算时,遵循如下规则:

  两个操作数中,先考虑是否有一个是double类型的。如果有,另一个操作数和结果 将会被转换成double类型。再依次考虑float,long。除此之外,两个操作数(包括byte、short、int、char)都将会被转换成int类型。

byte b1 = 10 ;  //OK,会检查发现10没有超过byte类型的最大值
byte b2 = 12; //OK,会检查发现12没有超过byte类型的最大值 byte b = b1 + b2; //Error,byte类型在计算时会自动提升为int类型,此时就会报错,因为b1+b2实际上是int类型,但是左侧的变量为byte类型。 short s1=1; //OK,会检查发现1没有超过short类型的最大值
s1=s1+1; //Error,因为s1+1 结果int,但左侧变量为 short,报错 s1++; //OK,不会报错,与s1=s1+1不同!!!,会检查发现2没有超过short类型的最大值 s1=1+1; //OK,1+1 是个编译时可以确定的常量,'+'运算在编译时就被执行了,而不是在程序执行的时候,这个语句的效果等同于s1=2

2) 当使用 +=、-=、*=、/=、%= 、 i++、 ++i 运算符对基本类型进行运算时,遵循如下规则:

  运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。自增(减)运算也类似。

short s1=1; // OK,会检查发现1没有超过short类型的最大值
short s2; s1+=1; // OK,正确,1首先被强制转换为short型,然后再参与运算,并且结果也是short类型 s2 = ++s1; // OK,正确,s2的值为2

2、强制转型

强制转换的格式是在需要转型的数据前加上 “( )”, 然后在括号内加入需要转化的数据类型。主要发生于以下两种情形:

  • 由高精度向低精度转换

  • 一种类型到另一种类型转换,则必须使用强制类型转化(同级之间:byte,short,char)

 byte b = 3;
int i = 3;
long t = 3;
float f = 3;
char c = 3;
short s = 3; i = (int) f; // OK,由高精度向低精度转换
t = (long) f; // OK,由高精度向低精度转换
b = (byte) i; // OK,由高精度向低精度转换 i = b; // OK,由低精度向高精度转换,自动转型
System.out.println(c==s); // OK,true,c 和 s 自动转型为int,然后比较 b = (byte) s; // OK,一种类型到另一种类型转换
c = (char) b; // OK,一种类型到另一种类型转换
c = (char) s; // OK,一种类型到另一种类型转换

特别需要注意的是,强制转换常常会导致二进制位的截取,甚至会导致意想不到的结果:

int i = 128;
byte b = (byte)i;
System.out.println(b); // -128(即-0)

---------------------
作者:书呆子Rico
来源:CSDN
原文:https://blog.csdn.net/justloveyou_/article/details/52651211
版权声明:本文为博主原创文章,转载请附上博文链接!

Java 基础 - 原生类型的更多相关文章

  1. java 基础 浮点类型

    1.浮点类型用于表示小数的数据类型. 2.浮点数原理:也就是二进制科学计数法. 3.Java的浮点类型有float和double两种. 4.Java默认浮点类型计算的结果是double类型,字面量也是 ...

  2. java 基础 字符类型

    1.char类型的字面量可以是一个英文字母.字符或一个汉字,并且由单引号包括. 2.Java底层使用一个16位的整数来处理字符类型,该数值是一个字符的unicode编码值. unicode: 1.un ...

  3. java 基础 整数类型

    1.Java有四种整数类型:byte.short.int和long. 2.Java默认整数计算的结果是int类型. 3.整数的字面量是int类型. 4.若字面量超过int类型的最大值,则字面量是lon ...

  4. Java基础__Integer类型中的自动装箱

    Integer类型的自动装箱:就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱. ...

  5. Java 基础 - 基本类型 & 包装类型

    基本数据类型和包装类的区别 定义不同.包装类属于对象,基本数据类型不是 声明和使用方式不同.包装类使用new初始化,有些集合类的定义不能使用基本数据类型,例如 ArrayList<Integer ...

  6. Java基础——基本类型包装类

    一.概述: 将基本数据类型封装成对象 优点: 可以在对象中定义更多的功能方法操作该数据 常见用法: 用于基本类型与字符串之间的转换 基本数据类型 包装类 byte Byte short Short i ...

  7. Java基础类型总结

    最近一直在总结反思自己, 趁着现在请假在学校上课的空余时间,从基础开始重新温故学习下Java,充实下自己. 一.数据类型 从下图中,我们可以很清晰的看出Java中的类型,其中红色方框中的是Java的4 ...

  8. Java 基础【09】 日期类型

    java api中日期类型的继承关系 java.lang.Object --java.util.Date --java.sql.Date --java.sql.Time --java.sql.Time ...

  9. 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错

    原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...

随机推荐

  1. Oracle导出存储过程对象

    $ pwd/home/oracle 导出存储过程 $ vi test.par INCLUDE=PROCEDURE:"IN ('P_TEST_LAST_DDL')" SCHEMAS= ...

  2. xxd - 以十六进制形式表示

    总览 (SYNOPSIS) xxd -h[elp] xxd [options] [infile [outfile]] xxd -r[evert] [options] [infile [outfile] ...

  3. boost asio tcp 多线程异步读写,服务器与客户端。

    // server.cpp #if 0 多个线程对同一个io_service 对象处理 用到第三方库:log4cplus, google::protobuf 用到C++11的特性,Windows 需要 ...

  4. vue computed和methods 计算属性和侦听器

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. 强大的httpClientUtils

    <!-- https://mvnrepository.com/artifact/com.arronlong/httpclientutil --> <dependency> &l ...

  6. DELPHI 异常处理2

    今天在写用ADO从EXCEL导入数据的程序时,出现个错误,弄了很久都弄不好,最后还是用异常处理解决掉了. 数据中日期在导入之前要转换成日期格式,虽然说一个strtodate就可以转好了,但是数据中的日 ...

  7. lua的运算符

    1.赋值运算符 --赋值 str="helllo".."world" print(str) a,b=10,20 print(a,b) c,d,e=1,2 pri ...

  8. Sublime 安装、删除插件

    安装 按 Ctrl + Shift + P 输入Install Package 输入 要安装的插件名称,enter即可 删除 按 Ctrl + Shift + P 输入Remove Package 选 ...

  9. 装hadoop的第一步,装ubuntu并换源并装jdk

    如何装ubuntu,这个自己百度.具体安装网站:http://www.ubuntu.com 我安装的是ubuntu Server版本的,然后是全英文安装.所以它的源自动定位到美国 下面是如何换源的,第 ...

  10. class7_Checkbutton 勾选项

    最终的运行效果(程序见序号3):   #!/usr/bin/env python# -*- coding:utf-8 -*-# ------------------------------------ ...