Java中byte、short、char、int、long运算时自动类型转化问题
--------------------------------------------------------------------------------------------------
★★自动(隐式、默认)类型转换与强制(显式)类型转换★★
1) boolean类型不参与转换
2) 默认转换
A:从小到大
B:byte,short,char --» int --» long --» float --» double
C:byte,short,char之间不相互转换,直接转成int类型参与运算。
3) 强制转换
A:从大到小
B:可能会有精度的损失,一般不建议这样使用。
C:格式:
目标数据类型 变量名 = (目标数据类型) (被转换的数据);
★★表达式的式值★★
int a = 10;
int b = 20;
int c = (a = b); //赋值式本身也是表达式,所以它也有式值!!!
--------------------------------------------------------------------------------------------------
大家都知道,在进行运算时,Java会隐式的自动进行类型转化。那么有哪些情况会进行转化呢?总结如下:
(一)算术运算符
1) 单目运算符:+(取正)、-(取负)、 ++(自增1)、 --(自减1)
a) +(取正)、-(取负)
当操作数是byte,short,char时,会自动转化为int类型;返回结果为int。
当操作数是int,long时,不转化,原来是啥类型,还是啥类型。
b) ++(自增1)、 --(自减1)
不管操作数是啥类型,不转化。
2) 双目运算符:+、 -、 *、 /、 %(取余)
当两个操作数中没有long类型时,两个操作数中非int类型会先自动转换为int类型,再参与运算,返回结果为int;
当两个操作数中含有long类型时,两个操作数中非long类型会自动转换为long类型,再参与运算,返回结果为long;
(二)位运算符
1) &(按位与)、|(按位或)、^(按位异或)
当两个操作数中没有long类型时,两个操作数中非int类型会先自动转换为int类型,再参与运算,返回结果为int;
当两个操作数中含有long类型时,两个操作数中非long类型会自动转换为long类型,再参与运算,返回结果为long;
2) ~(按位非)
当操作数是byte,short,char时,会自动转化为int类型;返回结果为int。
当操作数是int,long时,不转化,原来是啥类型,还是啥类型。
3) << (带符号左移)、 >>(带符号右移)、 >>> (无符号右移)
当操作数是byte,short,char时,会自动转化为int类型;返回结果为int。
当操作数是int,long时,不转化,原来是啥类型,还是啥类型。
(三)赋值运算符
1) 基本赋值运算符:=
a) 变量 = 变量:小赋大,自动转;大赋小,不自动转换;
b) 变量 = 常量:不自动类型转换
2) 扩展赋值运算符:+=、-=、*=、/=、%=
这里需要特别说明一下,扩展赋值运算符隐含了强制类型转换,即: ※※ s += 1 等价于 s = (s的数据类型)(s + 1) ※※
★★总结★★
※除了自增和自减不进行转化外,其它情况都是无long型时,所有非int类型转成int类型;有long类型时,都转成long类型(简称:运算中无long,int称大王。。。)※
Java中byte、short、char、int、long运算时自动类型转化问题的更多相关文章
- 【转】java中byte数组与int类型的转换(两种方式)----不错
原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法, ...
- java乱码详解(java中byte与char的转换)
转自:http://hi.baidu.com/%C6%F3%D2%B5%BC%D2%D4%B0/blog/item/825a4858d6248e8b810a181a.html java byte与 ...
- Java中基本数据类型byte,short,char,int,long,float,double 取值范围
部分内容转自:java 彻底理解 byte char short int float long double 首先说byte: 这段是摘自jdk中 Byte.java中的源代码: /** * A co ...
- [转载] java中byte数组与int,long,short间的转换
文章转载自http://blog.csdn.net/leetcworks/article/details/7390731 package com.util; /** * * <ul> * ...
- java中byte数组与int,long,short间的转换
http://blog.csdn.net/leetcworks/article/details/7390731 package com.util; /** * * <ul> * <l ...
- Java 中byte 与 char 的相互转换 Java基础 但是很重要
char转化为byte: public static byte[] charToByte(char c) { byte[] b = new byte[2]; b[0] = ...
- java中byte数组与int类型的转换(两种方式)
http://blog.csdn.net/z69183787/article/details/38564219 http://blog.csdn.net/z69183787/article/detai ...
- Java 中 byte、byte 数组和 int、long 之间的转换
Java 中 byte 和 int 之间的转换源码: //byte 与 int 的相互转换 public static byte intToByte(int x) { return (byte) x; ...
- java中String和char的区别
首先来看一下Java的数据类型.Java 包括两种数据类型: 1.原始数据类型(primitive data type):byte,short, char, int, long,float,doubl ...
随机推荐
- Windows平台下,Java性能分析工具VisualVM的Tomcat8的配置
VisualVM在JDK6版本及以上已经自带这个应用. 位置:C:\Program Files (x86)\Java\jdk1.8.0_60\bin\jvisualvm.exe 在Windows环 ...
- 【进阶1-3期】JavaScript深入之内存空间详细图解(转)
这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://mp.weixin.qq.com/s/x4ZOYysb9XdT1grJbBMVkg 今天介绍的是JS内存空间,了解内存空间中的堆和 ...
- python 知识梳理
1.数据类型:字符串,列表,元组,字典,集合.处理每种数据类型的函数 2.判断与循环部分 3.高级函数:lambda,map,reduce,filter 4.自定义模块以及第三方模块 5.函数式编程 ...
- confluence搭建破解及汉化教程
注:本文参考了 < confluence搭建破解及汉化教程 > 本文是在yum环境搭建好,且可用联网的前提下进行的实际操作并作记录的. 关于yum本地环境搭建可以参考此文:<Cen ...
- Oracle 高水位说明和释放表空间,加快表的查询速度
高水位的介绍 数据库运行了一段时间,经过一些列的删除.插入.更改操作有些表的高水位线就有可能和实际的表存储数据的情况相差特别多,为了提高检索该表的效率,建议对这些表进行收缩: 查找高水位线的表 查找表 ...
- Confluence 6 通过 SSL 或 HTTPS 运行 - 创建或请求一个 SSL 证书
在启用 HTTPS 之前,你需要一个有效的证书,如果你已经有了一个有效的证书,你可以直接跳过这个步骤,进入 step 2. 你可以创建一个自签名的证书,或者从信任的 Certificate Autho ...
- axis 数据流
产生数据流的代码 模板 重新修改了下 :]axis_data_cnt='d0; :]axis_data_frame_cnt='d0; :]delay_cnt='d0; initial begin ...
- LeetCode(84): 柱状图中最大的矩形
Hard! 题目描述: 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是柱状图的示例,其中每个柱子的宽度 ...
- vue项目中 axios 和Vue-axios的关系
文章收集于:https://segmentfault.com/q/1010000010812113 在vue项目中,会经常看到如下代码: 今天看到有些项目是这样写的,就有点看不懂了. ----解 ...
- 步步为营-104-Lambda语句
1:Lambda的拼接 首先借助一个Lambda的帮助类 using System; using System.Collections.Generic; using System.Linq; usin ...