Java数据类型转换问题
基本数据类型
整数型
byte --- 字节型 --- 1个字节 --- -27~27-1 -> -128~127
byte b1 = 25; byte b2 = 127;
short --- 短整型 --- 2个字节 --- -215~215-1 -> -32768~32767
int --- 整型 --- 4个字节 --- -231~231-1 --- 在Java中整数默认为int类型
System.out.println(5);
long --- 长整型 --- 8个字节 --- -263~263-1 --- 需要在结尾添加l/L作为标识
long l = 2L;
浮点型
---需要在结尾添加f/F作为标识
float f = 3.5f;
---在Java中小数默认为double类型
double d = 2.64; double d2 = 5.21D; double d3 = 7.33d;
double d = 4e4; 表示4*104 aeb表示a*10b,表示十进制的科学计数法
double d = 0x5p3; 表示十六进制的科学计数法 xpy表示x*2y
字符型
char --- 字符型 --- 2个字节 --- 0~65535 ---默认编码就是utf-16
char c = ‘a’; char c2 = ‘4’; char c3 = ‘\u20ac’;
// 不存在空字符和负数的字符,无论这个字符是纯数字或者是字符
boolean类型
数据类型的转换
自动类型转换/隐式转换
byte b = 3;
int i = b;
int i =7;
long l = i;
float f = 3.57f;
double d = f;
规律一:小的类型可以自动转化为大的类型
long l = 10; --- Java中整数默认为int,所以10就是int类型,int可以自动提升为long类型 --- 如果一个整数在int的范围内,那么在赋值给long类型的时候可以不加L
int i = 10;
float f = i;
规律二:整数可以自动转化为小数,但是可能产生精度损失
float f = 500;
char c = ‘a’;
int i = c;
规律三:字符可以自动转化为整数
short类型和char类型范围没有完全重合也不能完全包含
short s = ‘a’; --- 可以 --- ‘a’是字面量,是一个确定的值。所以在编译的时候就能确定 ‘a’的值是否在short的取值范围内;如果在这个范围内,就允许转化
char c = 97; --- 可以 --- 97是字面量,是一个确定的值。所以在编译的时候就能确定 97的值是否在char的取值范围内;如果在这个范围内,也允许转化
char c = ‘a’;
short s = c; --- 不可以 --- c是变量,所以在编译期间只能确定c是一个char类型的值但是不能确定c的具体值;那么就会在编译期间比对两个类型之间是否能够完全转化,发现char类型不能完全转化为short类型,所以认为这个值会有超过short取值范围的风险,因此不允许转化
short s = 97;
char c = s; --- 不可以
byte/short/char可以参与自增/自减运算,运算完成之后结果类型没有改变 --- 因为在底层做了一次强制转换
规律四:byte,short,char在计算的时候会自动转换为int类型。以下代码报错。单纯的赋值不算是运算。
char c = 97; c = c + 1; |
规律五:在自增自减以及简化运算的时候会发生强转,所以以下代码即使在超出范围的情况下都不会报错。
char c = 97; c *= 300; |
现在的问题是
Float f = 2.6; // 报错①在Java中小数默认为double类型
但是char a = 5; // 成功②在Java中整数默认为int类型
他们两个都是字面量但是结果不同,自动int理论和字面量理论都遇到了挑战。按照字面量理论来说①的实际值没有超过但是报了错②完美运行。按照自动int理论来说,②应该报错但是它是按照字面量理论执行的。综上,所以不知道真正的假设。
Byte(等)的溢出问题
强制类型转换/显式转换
int i = 5;
byte b = (byte)i; 表示将变量i强制转换为byte类型之后再赋值给变量b
注意:大类型可以强转为小类型,但是在转化的时候因为字节的损失所以可能导致数据不准确
double d = 3.97;
int i = (int)d; --- 小数在转化为整数的时候会舍弃小数部分。
Java数据类型转换问题的更多相关文章
- Java数据类型转换浅析
Java数据类型转换分为两种:自动类型转换和强制类型转换. 数据类型转换的关键是数据类型相应的表数范围大小 1.自动类型转换: 概念:小范围数据类型会自动转化成大范围数据类型 实例: int a=10 ...
- Java数据类型转换1
1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...
- java数据类型转换那点事
public class kkk { /** * 先看看eclipse对于数值型转换会有哪些报错,但是有一点必须明确,eclipse不报错的,不一定就是说这种思维逻辑是对的 * 可以直接将代码复制过去 ...
- Java数据类型转换(自动转换和强制转换)
数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...
- 2、java数据类型转换
当数据类型不一样时,将会发生数据类型转换. 1.自动类型转换(隐式) 1. 特点:代码不需要进行特殊处理,自动完成. 2. 规则:数据范围从小到大. System.out.println(1024); ...
- 第24章 Java 数据类型转换
每日一句 井底点灯深烛伊,共郎长行莫围棋. 每日一句 What we call "failure" is not falling down, but the staying dow ...
- Java 数据类型转换(转换成字节型)
package com.mystudypro.byteutil; import java.io.UnsupportedEncodingException; public class ConToByte ...
- java数据类型转换的常见方法
public class Testfun { public static void main(String[] args) { // (一)跨Number父类的类型转换 // 1.str转int =& ...
- Java 数据类型转换的骚操作和神奇现象
问:银行用什么数据类型来表示余额?float还是double? 都不是!!下面说明为什么都不可以呢? public static void main(String[] args) { //浮点数他都是 ...
随机推荐
- 设置Maven默认的JDK为1.7,解决Update Maven Project默认为1.5和Maven打包报错2个问题
1.之前,一直遇到这个问题. Update Maven Project的时候,JDK变成了1.5的. 如果项目中有使用"@overdide",程序就会报错,需要手动修改JRE ...
- Eclipse如何从导入SVN上导入项目
1.右键单击,选择 Import,进入导入项目窗口 2.点击选择从SVN检出项目,点击Next下一步 3.选择创建新的资源库位置,点击Next,如果项目之前已经导入过删除掉了,重新导入的时候,只需勾选 ...
- 洛谷——P1179 数字统计
https://www.luogu.org/problem/show?pid=1179 题目描述 请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数. 比如给定范围[2, 22],数字 ...
- 10559 - Blocks(方块消除|DP)
该题乍一看和矩阵链乘非常类似,但是有一个不同之处就是该题能够拼接 . 为了达到这个目的.我们不得不拓展维度d[i][j][k].用一个k表示最右边拼接了k个和a[j]同样颜色的方块. 问题的关键在 ...
- 边缘独立(marginal independent)的理解及举例
1. 定义 ∀xi∈dom(X),yj∈dom(Y),yk∈dom(Y),如果满足, P(X=xi|Y=yj)==P(X=xi|Y=yk)P(X=Xi) 则称随机变量 X 边缘独立于随机变量 Y. 理 ...
- 微服务实践(七):从单体式架构迁移到微服务架构 - DockOne.io
原文:微服务实践(七):从单体式架构迁移到微服务架构 - DockOne.io [编者的话]这是用微服务开发应用系列博客的第七篇也是最后一篇.第一篇中介绍了微服务架构模式,并且讨论了微服架构的优缺点: ...
- Java BigDecimal的基本使用方法
1.对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类 2.运算速度比一般的+.-.*./要快 3.基本方 法描 述 ...
- [React Intl] Render Content with Markup Using react-intl FormattedHTMLMessage
In this lesson, we’ll use the react-intl FormattedHTMLMessage component to display text with dynamic ...
- Log Explorer 使用说明(原创)
关于Log Explorer (我抄的) 介绍Log Explorer主要用于对MSSQLServer的事物分析和数据恢复.你可以浏览日志.导出数据.恢复被修改或者删除的数据(包括执行过update, ...
- ANDROID内存优化(大汇总——全)
写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...