自动转换

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类型转换详解(自动转换和强制转换)的更多相关文章

  1. Java类型转换详解

    Java类型转换详解 最近有同学问:自动类型转换老是记不住,到底是大转小,还是小转大 其实这个不用死记硬背,很好理解,我们拿 int 和 short 来举例: int 是 4 字节,也就是 32 bi ...

  2. Java数据类型转换(自动转换和强制转换)

    数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...

  3. Java数据类型的转换:隐式(自动)转换与强制转换

    原文链接:http://java.chinaitlab.com/base/725590.html 一些初学JAVA的朋友可能会遇到JAVA的数据类型之间转换的苦恼,例如,整数和float,double ...

  4. 「万字图文」史上最姨母级Java继承详解

    摘要:继承是面向对象软件技术中的一个概念.它使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用. 本文分享自华为云社区<「万字图文」史上最姨母级Java继承详解丨[奔跑吧!JAVA] ...

  5. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

  6. Java虚拟机详解----JVM常见问题总结

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. Java ClassLoad详解

    Java ClassLoad详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1. ...

  8. Java IO 详解

    Java IO 详解 初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正, ...

  9. Java集合详解3:Iterator,fail-fast机制与比较器

    Java集合详解3:Iterator,fail-fast机制与比较器 今天我们来探索一下LIterator,fail-fast机制与比较器的源码. 具体代码在我的GitHub中可以找到 https:/ ...

随机推荐

  1. iconfont 怎么在项目中使用图标库

    iconfont是很多设计以及前后端人员编写页面时经常用到的网站,阿里不仅为我们提供了免费的图标库,并且有一套完整的图标库体系.很多初学者只知道从图标库中下载图标放入项目中,但在实际项目应用中,过多的 ...

  2. jira + confluence 安装和破解

    Window环境: 环境准备 安装JAVA1.8以上版本 安装SQL SERVER 或 MySQL: jira安装和破解 下载安装包 https://downloads.atlassian.com/s ...

  3. 汇编语言1(mooc)

  4. 听说你开发.NET还在用VS,小哥哥给你推荐全平台的Rider

    本文地址:http://www.cnblogs.com/likeli/p/8461010.html 前言 .NET平台的开发一直都只能使用Visual Studio来开发,自从dotnet core ...

  5. setfacl命令 来自: http://man.linuxde.net/setfacl

    常用选项##### <pre>-b,--remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留. -k,--remove-default:删除缺省的 ...

  6. ipset批量配置iptables

    简介: ipset是iptables的扩展,允许你创建匹配整个地址sets(地址集合)的规则.而不像普通的iptables链是线性的存储和过滤,ip集合存储在带索引的数据结构中,这种集合比较大也可以进 ...

  7. 【国家集训队2010】小Z的袜子[莫队算法]

    [莫队算法][国家集训队2010]小Z的袜子 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程, ...

  8. 【Unity3D技术文档翻译】第1.3篇 创建 AssetBundles

    上一章:[Unity3D技术文档翻译]第1.2篇 为打包 AssetBundles 准备资产 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced ...

  9. 《InsideUE4》UObject(六)类型系统代码生成重构-UE4CodeGen_Private

    读的不如写的快 引言 在之前的<InsideUE4>UObject(四)类型系统代码生成和<InsideUE4>UObject(五)类型系统收集章节里,我们介绍了UE4是如何根 ...

  10. Thymeleaf入门基础

    一.简介 1.thymeleaf优点 ①是一个支持html原型的自然引擎,它在html标签增加额外的属性来达到模板+数据的展示方式,由于浏览器解释html时,忽略未定义的标签属性,因此thymelea ...