第24章 Java 数据类型转换

每日一句

井底点灯深烛伊,共郎长行莫围棋。

每日一句

What we call "failure" is not falling down, but the staying down. 所谓“失败”不是跌倒,而是就此躺平。

概述

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

自动数据类型转换

自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:

低--------------------------------------------->高
byte,short,char-> int -> long -> float -> double

运算中,不同类型的数据先转化为同一类型,然后进行运算,转换规则如下:

操作数1类型操作数2类型转换后的类型
byte、short、charintint
byte、short、char、intlonglong
byte、short、char、int、longfloatfloat
byte、short、char、int、long、floatdoubledouble

强制数据类型转换

强制转换的格式是在需要转型的数据前加上“( )”,然后在括号内加入需要转化的数据类型。有的数据经过转型运算后,精度会丢失,而有的会更加精确,下面的例子可以说明这个问题。

publicclassDemo{
    publicstaticvoidmain(String[] args){
        int x;
        double y;
        x = (int)34.56 + (int)11.2;  *// 丢失精度*
        y = (double)x + (double)10 + 1;  *// 提高精度*
        System.out.println("x=" + x);
        System.out.println("y=" + y);
    }
}
运行结果:
x=45
y=56.0

仔细分析上面程序段:由于在 34.56 前有一个 int 的强制类型转化,所以 34.56 就变成了 34。同样 11.2 就变成了 11 了,所以 x 的结果就是 45。在 x 前有一个 double 类型的强制转换,所以 x 的值变为 45.0,而 10 的前面也被强制成 double 类型,所以也变成 10.0,所以最后 y 的值变为 56。

美文佳句

很多时候,事情的困境,常常是因为我们自己钻了牛角尖,此时,你需要做的就是改变。

完美主义者可以放下执念,允许自己有普通人都会犯的小迷糊;职场妈妈可以直面现实,一个人永远做不到家庭和事业的双百分;承担了过多工作任务的员工,可以尝试向上级反映,寻求资源或调整目标……这些,都是我们应当并可以作出的改变。

正如这句话所说:世界上从来都没有所谓的奇迹,命运一直都掌握在我们自己手里。想要改变自己的命运,最重要的就是改变自己。当你开始改变自己的时候,很多东西就跟着改变了。

下一次,当烦恼降临时,不妨试试从自身找找问题。调整努力的方向和节奏,学会给心灵松绑,你会发现:很多事,其实没什么大不了。

面试题

SpringMVC 框架有什么用?

Spring Web MVC 框架提供”模型-视图-控制器”( Model-View-Controller )架构和随时可用的组件,用于开发灵活且松散耦合的 Web 应用程序。 MVC 模式有助于分离应用程序的不同方面,如输入逻辑,业务逻辑和 UI 逻辑,同时在所有这些元素之间提供松散耦合。

SpringMVC 框架有什么用?

Spring Web MVC 框架提供”模型-视图-控制器”( Model-View-Controller )架构和随时可用的组件,用于开发灵活且松散耦合的 Web 应用程序。 MVC 模式有助于分离应用程序的不同方面,如输入逻辑,业务逻辑和 UI 逻辑,同时在所有这些元素之间提供松散耦合。

HashMap、ConcurrentHashMap 和Hashtable有什么区别?

HashMapConcurrentHashMapHashtable
线程是否安全,以及实现线程安全的方式HashMap不安全线程安全,ConcurrentHashMap
JDK1.7底层采用分段锁,对整个桶数进行了分割分段(segment),
每一把锁只锁容器其中一部分数据,提高并发访问率。
JDK 1.8 底层采用 Node数组 + 链表 + 红黑树的结构实现,
并发控制使用了 synchronized 和 CAS 操作。
线程安全,底层采用synchronized 来保证线程安全,
直接是方法级别的加锁, ConcurrentHashMap 虽然也是 synchronized
但它是对链表或者红黑树的头节点进行加锁,锁的粒度更小
底层工作原理底层采用的是 数组 + 链表ConcurrentHashMap
JDK 1.7 底层采用 分段的数组 + 链表实现。
JDK 1.8 采用的是 数组 + 链表/红黑树
底层采用的是 数组 + 链表
空值问题HashMap允许使用null值(key和value)都可以。
但是这样的键只有一个,可以有一个或多个键所对应的值为null
HashTable不允许null值(key和value都不可以)
初始容量、扩容与默认负载因子HashMap 默认初始大小 16,每次扩容 2n,默认负载因子是0。75HashTable 默认初始大小为11,每次扩容 2n+1

你好,我是yltrcc,日常分享技术点滴,欢迎关注我:ylcoder

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值