java中用float时,数字后面加f,这样是为什么你知道吗


Posted in Java/Android onSeptember 04, 2021

Java float 与 double 的区别

1、float是单精度浮点数

内存分配4个字节,占32位,有效小数位6-7位

double是双精度浮点数,内存分配8个字节,占64位,有效小数位15位

2、java中默认声明的小数是double类型的

如double d=4.0

如果声明: float x = 4.0则会报错,需要如下写法:float x = 4.0f或者float x = (float)4.0

其中4.0f后面的f只是为了区别double,并不代表任何数字上的意义

3、对编程人员来而

double 和 float 的区别是double精度高,但double消耗内存是float的两倍,且double的运算速度较float稍慢。

Java float、double、long类型变量赋值添加f、d、L尾缀问题

1、添加尾缀说明 

我们知道Java在变量赋值的时候,其中float、double、long数据类型变量,需要在赋值直接量后面分别添加f或F、d或D、l或L尾缀来说明。

其中,long类型最好以大写L来添加尾缀,因为小写l容易和数字1混淆。

例如:

long lNum  = 1234L;
float fNum = 1.23f;
double dNum = 1.23d;

这是Java语法规定,不添加尾缀很容易引起编译器报错,并且程序可读性也会变差。

2、不添加尾缀也不会报错的情况  

Java语言中,整数直接量(例如:1、2、10等),JVM虚拟机是默认为int类型数据的。所以,当整数直接量赋给long、float或者double,而不添加尾缀,虚拟机也会直接将int类型数据自动转换为对应类型然后赋值。因为数据长度短的转换为长的并不会造成数据丢失,所以默认可以自动转换。   

例如:

long  lNum  = 5;   //不报错,因为int自动转换为long类型,不会报错
float fNum  = 7;   //不报错,因为int自动转换为float类型,不会报错
double dNum = 10;  //同上

  

但是,当浮点直接量(例如:1.2等),JVM虚拟机默认为double类型,如果直接赋值给float就会引起编译器报错。

float fNum  = 1.2; //报错,因为1.2虚拟机是默认为double类型,不能直接赋值给float类型变量
float fNew  = 1.3f;//正确,因为尾缀添加了f,即告诉了虚拟机1.3属于float类型变量

3、总结  

所以,当Java中遇到这三种类型变量需要赋直接量时候,最好都添加上相应的尾缀。这样不仅会防止编译器报错,也会增加程序的可读性。  

但是下面这种情况就算添加尾缀也是错的,因为尾缀仅是为了告诉虚拟机该直接数属于什么数据类型,而不能实现数据类型强制转换。

long lNum = 1.2L;      //错误,double类型数据不能直接赋值给long类型
long lNew = (long)1.2; //正确,double类型数据强制转换为long类型

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
浅谈自定义校验注解ConstraintValidator
Jun 30 Java/Android
Springboot使用Spring Data JPA实现数据库操作
Jun 30 Java/Android
Spring实现内置监听器
Jul 09 Java/Android
关于springboot配置druid数据源不生效问题(踩坑记)
Sep 25 Java/Android
Java异常处理try catch的基本用法
Dec 06 Java/Android
java executor包参数处理功能 
Feb 15 Java/Android
Android开发之WECHAT微信小程序路由跳转的两种形式
Apr 12 Java/Android
Java 写一个简单的图书管理系统
Apr 26 Java/Android
Java对文件的读写操作方法
Apr 29 Java/Android
Java实现添加条码或二维码到Word文档
Jun 01 Java/Android
SpringBoot详解执行过程
Jul 15 Java/Android
HttpClient实现表单提交上传文件
Aug 14 Java/Android
SpringBoot实现quartz定时任务可视化管理功能
Aug 30 #Java/Android
logback 实现给变量指定默认值
Aug 30 #Java/Android
SpringMVC 整合SSM框架详解
Aug 30 #Java/Android
使用logback实现按自己的需求打印日志到自定义的文件里
Aug 30 #Java/Android
logback如何自定义日志存储
Aug 30 #Java/Android
idea以任意顺序debug多线程程序的具体用法
Aug 30 #Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
Aug 30 #Java/Android
You might like
PHP 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
PHP针对redis常用操作实例详解
2019/08/17 PHP
百度留言本js 大家可以参考下
2009/10/13 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
2017/03/08 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
详解微信小程序支付流程与梳理
2019/07/16 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
Python制作CSDN免积分下载器
2015/03/10 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
Django 自定义分页器的实现代码
2019/11/24 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
Yahoo-PHP面试题1
2016/07/20 面试题
临床医师专业个人自我评价
2014/01/08 职场文书
会议活动邀请函
2014/01/27 职场文书
护理专业自荐信范文
2014/02/26 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书
个人工作决心书
2015/09/22 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python