更详细的说明,请参考: 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类型的最大值

shorts2;

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什么是原生类_Java 基础 - 原生类型相关推荐

  1. java的时间日期类_Java基础学习:日期时间类

    Date 类 所在的包:java.util.Date Date 类表示特定的瞬间,精确到毫秒.创建对象的值为从1970年1月1日00:00:00 到当前系统显示时间所经历的毫秒数. 例如:public ...

  2. java构造一个水果类_Java基础入门之Object类、匿名内部类、构造方法的继承解析...

    前言 大家好,我是Java进阶者.这篇文章我们主要介绍Java基础中的Object类.匿名内部类.构造方法的继承知识,一起来学习下吧! 一.Object类 1.Object类是所有类的父类,所有类都继 ...

  3. java 代理ip工具类_Java基础之java处理ip的工具类

    java处理ip的工具类,包括把long类型的Ip转为一般Ip类型.把xx.xx.xx.xx类型的转为long类型.根据掩码位获取掩码.根据 ip/掩码位 计算IP段的起始IP.根据 ip/掩码位 计 ...

  4. java中原生方法_java中原生(native)函数的用法

    1.原生(Native)函数的概念 在Java程序中,可以使用由其他编程语言实现的函数,这种函数,在Java中被称之为 原生(Native)函数. 2.在Java程序中使用原生函数的优缺点 1)优点 ...

  5. java程序运行必须得三个io类_Java基础知识(三)

    一.hashCode 与 equals (重要) 面试官可能会问你:"你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?" 1 ...

  6. java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum

    一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...

  7. java时间日期格式器_JAVA基础类库(二)-----日期、时间类和格式器

    Date类 public classDateTest{public static voidmain(String[] args){ Date d1= newDate();//获取当前时间之后100ms ...

  8. java中Object类是最顶层的类_Java基础之Object类

    类Object是类层次结构的根类.每个类都直接或者间接地继承Object类.所有对象(包括数组)都实现这个类的方法.Object类中的构造方法只有一个,并且是无参构造方法,这说明每个类中默认的无参构造 ...

  9. java 获取所有实现类_Java动态获取实现某个接口下所有的实现类对象集合

    Java动态获取实现某个接口下所有的实现类对象集合 最近有个需求,我需要获取所有同一类型的定时任务的对象,并自动执行. 我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这 ...

最新文章

  1. js调用数科阅读器_阅读大型 JavaScript 源码时有什么好用的工具?
  2. 真正的人工智能至少还要几百年才能实现,你信吗?
  3. 更改Xamarin Android App名称
  4. qt编写activex_Qt中使用ActiveX(一)
  5. Java 并发编程之同步工具类闭锁 CountDownLatch
  6. Poj 1006 / OpenJudge 2977 1006 Biorhythms/生理周期
  7. Mysql 大量数据快速导出
  8. 专业人士对《程序员修炼之道》的赞誉
  9. 《一个操作系统的实现》 ubuntu系统环境配置
  10. linux 自动安装脚步,linux自动安装lnmp脚步
  11. SQL行列转换-sum函数的妙用
  12. 手机通过RNDIS共享网络
  13. 【微信小程序】图片下方有白边
  14. 大数据智能算法及测评技术(二)
  15. Ubuntu 10.10下编译安装无线网卡
  16. PDF文件签名与盖章
  17. python中os.listdir的用法
  18. 八种常见排序算法细讲
  19. 工作五年以上的程序员,应该干些什么
  20. 百度竞价推广的真正意义是什么?

热门文章

  1. 计算机系统中数据加工过程中,数据库系统复习题-第1章绪论
  2. pycharm格式化代码快捷键_你写的 Python 代码总是不规范?用它!
  3. linux mysql设置数据库utf_设置mysql数据库 utf8
  4. 用Setup Factory打包Visual C++ 2008开发的程序心得总结
  5. Android文件存储方式之openFileOutput与获取数据openFileInput
  6. mysql添加表字段_mysql命令添加表字段
  7. flash背景透明、置底、禁止放大 右键菜单
  8. PYTHON-迭代器,xxx生成式
  9. React优化性能的经验教训
  10. shell切割日志脚本