java类型转换详解(自动转换和强制转换)
自动转换
class Hello
{
public static void main(String[] args)
{
//自动转换
int a = 5;
byte b = 6;
int c = a + b;
System.out.println(c);
}
}
a是int类型,b是byte类型 当二者进行加法运算时(根据同类型相加结果还是同类型 并且低类型的先转换成高类型的然后在进行运算 最后结果也是同类型的才行) 由于int的范围比byte的取值范围大这个时候jvm会自动将b转换成int类型
强制转换
//强制转换
int a = (int)8.8;
强制转换就是将前面加上要转换的类型就可以了。
下面来看比较特殊的
class Hello
{
public static void main(String[] args)
{
byte b = 3;//正确
int x = 3;//正确
b = x;//错误 }
}
上面代码在编译的时候会报错 常量3的类型为int int类型可以赋值给byte的变量 但是b=x这个时候就不行了呢 因为根据常量优化机制 这种方式只针对 常量 不针对变量 也就是说大范围的不能赋值给小范围 除非用强制转换类型
在看下面的也遵循上面的原则
class Hello
{
public static void main(String[] args)
{
byte b1=3,b2=4,b;//正确 (注:常量也有数据类型)
b = b1 + b2;//错误 因为b1 b2这个时候是变量(常量优化机制只针对常量不针对变量)
b = 3 + 4;//正确 }
}
上面的例子也就是所谓的二个默认 当二个整数变量相加时 默认是int类型相加 当二个浮点型类型相加时 默认是doblue类型相加
在看一个例子
class Hello
{
public static void main(String[] args)
{ short s = 1;
s = s + 1;//错误 和 short s = 1;
s+=1;//正确
}
}
上面的代码从表面上看是没什么区别的 为什么第二种写法就正确了呢?
第一种算的时候 会将s自动转换为int类型在进行加法运算(低精度转高精度) 然后得出的结果是int类型 在赋值给short类型 这样是不合适的(高精度不能赋值给低精度类型)所以会报错 正确的写法如下面代码
class Hello
{
public static void main(String[] args)
{ short s = 1;
s = (short)(s + 1); System.out.println(s);
}
}
那第二种为什么是可行的呢?
因为+=、-+、*=、/= 这些运算符比较特殊 本身就具有强制类型转换的作用。
java类型转换详解(自动转换和强制转换)的更多相关文章
- Java类型转换详解
Java类型转换详解 最近有同学问:自动类型转换老是记不住,到底是大转小,还是小转大 其实这个不用死记硬背,很好理解,我们拿 int 和 short 来举例: int 是 4 字节,也就是 32 bi ...
- Java数据类型转换(自动转换和强制转换)
数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...
- Java数据类型的转换:隐式(自动)转换与强制转换
原文链接:http://java.chinaitlab.com/base/725590.html 一些初学JAVA的朋友可能会遇到JAVA的数据类型之间转换的苦恼,例如,整数和float,double ...
- 「万字图文」史上最姨母级Java继承详解
摘要:继承是面向对象软件技术中的一个概念.它使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用. 本文分享自华为云社区<「万字图文」史上最姨母级Java继承详解丨[奔跑吧!JAVA] ...
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
- Java虚拟机详解----JVM常见问题总结
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Java ClassLoad详解
Java ClassLoad详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1. ...
- Java IO 详解
Java IO 详解 初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正, ...
- Java集合详解3:Iterator,fail-fast机制与比较器
Java集合详解3:Iterator,fail-fast机制与比较器 今天我们来探索一下LIterator,fail-fast机制与比较器的源码. 具体代码在我的GitHub中可以找到 https:/ ...
随机推荐
- BZOJ 3720: Gty的妹子树 [树上size分块]
传送门 题意: 一棵树,询问子树中权值大于$k$的节点个数,修改点权值,插入新点:强制在线 一开始以为询问多少种不同的权值,那道CF的强制在线带修改版,直接吓哭 然后发现看错了这不一道树上分块水题.. ...
- BZOJ 3105: [cqoi2013]新Nim游戏 [高斯消元XOR 线性基]
以后我也要用传送门! 题意:一些数,选择一个权值最大的异或和不为0的集合 终于有点明白线性基是什么了...等会再整理 求一个权值最大的线性无关子集 线性无关子集满足拟阵的性质,贪心选择权值最大的,用高 ...
- BZOJ 3771: Triple [快速傅里叶变换 生成函数 容斥原理]
题意:n个物品,可以用1/2/3个不同的物品组成不同的价值,求每种价值有多少种方案(顺序不同算一种) [生成函数]: 构造这么一个多项式函数g(x),使得n次项系数为a[n]. 普通型生成函数用于解决 ...
- HDU 2296 Ring [AC自动机 DP 打印方案]
Ring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissio ...
- 【视频编解码·学习笔记】7. 熵编码算法:基础知识 & 哈夫曼编码
一.熵编码概念: 熵越大越混乱 信息学中的熵: 用于度量消息的平均信息量,和信息的不确定性 越是随机的.前后不相关的信息,其熵越高 信源编码定理: 说明了香农熵越信源符号概率之间的关系 信息的熵为信源 ...
- 基于layui和bootstrap搭建极简后台管理框架
年前无聊,想自己搭建一个后台管理框架,对比了easyui.Extjs.H-ui.H+UI.layui几个框架,easyui和Extjs虽然功能强大但是界面实在是接受不了,H+UI和layuiAdmin ...
- 关于Mac设置alias别名访问服务器
1.首先要安装zsh[链接]robbyrussell/oh-my-zsh 什么是 oh-my-zsh (官网) 两种下载方式 如下图所示,下载安装成功 vi ~/.zshrc发开 打开zsh配置文件 ...
- 奥酷HTML5视频直播系统AMS6.0
今日,北极星通自主研发的流媒体服务系统Aoku Media Server6.0发布了,将正式支持HTML5直播,这使得网页中无需有flash播放插件或者其他插件,可直接观看直播,HTML5直播也会使得 ...
- wired-wireless_priority
有线网卡和无线网卡同时上网,优先级切换的设置方法 默认有线网卡优先权高 Q:如果你想改为无线高,How do? A: ①进入网络属性的有线网卡的连接属性,选择TCP/IP属性,点"高级... ...
- C语言_初步了解一下指针
指针的基本概念 在计算机中,所有的数据都是存放在存储器中的. 一般把存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等.为了正确地访问这 ...