自动转换

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. Azure ARM (21) Azure订阅的两种管理模式

    <Windows Azure Platform 系列文章目录> 熟悉Azure平台的读者都知道,Microsoft Azure服务管理,分为三个层次: 1.企业服务合同 (Enterpri ...

  2. web攻击

    一.XSS(跨站脚本攻击) 最常见和基本的攻击WEB网站的方法.攻击者在网页上发布包含攻击性代码的数据.当浏览者看到此网页时,特定的脚本就会以浏览者用户的身份和权限来执行.通过XSS可以比较容易地修改 ...

  3. [Python Study Notes]进程信息(丁丁软件监控进程,http-post)

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  4. 微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法

    主要内容在标题三,老手可直接跳到标题三. 本文主要解决个人开发者模板消息发送的问题(没有服务器,不能操作服务器的情况) 针对api.weinxin.qq.com不在以下合法域名列表内的问题提出的解决方 ...

  5. Java多线程应用总结

    一.基本方法 进程和线程一样,都是实现并发的一个基本单位.线程是比进程更小的执行单位,线程是在进程的基础上进行的进一步划分.所谓多线程,是指一个进程在执行过程中可以产生多个更小的程序单元,这些更小的单 ...

  6. 介绍一个轻量级iOS安全框架:SSKeyChain

    SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码.账户进行访问,包括读取.删除和设置.SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsoffes ...

  7. macbook air扩展显示器全屏滑动怎样不一起滑动?

    macbook air 外接了一个显示器(扩展),当我有多个桌面时,用手指滑动触控板切换桌面时,扩展屏幕也跟着切换桌面有什么办法能让我在切换主屏幕桌面的时候,扩展屏幕保持不动呢?上周还好好的,昨晚关机 ...

  8. ubuntu16 ftp 服务 vsftp 配置

    转载:沐心_ 地址:http://bbs.csdn.net/topics/392186116------------------------------------------------------ ...

  9. jQuery学习心得一

    1.闭包 每次看到jQuery的时候,首先想到的就是闭包.这是个老生常谈的问题了.今天重新回忆了一下闭包. 什么是闭包? 当有一个函数想要访问另一个函数内部的变量,这个是访问不了的.所有我们要用闭包来 ...

  10. C# HelpPage 接口文档配置

    1.打开项目路径如下的类文件: 1.1.找类方法 Register 下的 config.SetDocumentationProvider 并取消注释,修改 ~/App_Data/XmlDocument ...