oo_project_2java数据类型范围及测试
数据类型范围测试
一、数字常数的编译问题
java中的常量数字默认以int型编译
如:
long a = 1234567890; //十位
long b = 12345678900; //默认数据为int型,十一位超int范围,编译不过,在eclipse下数字有下划线提醒
如果用到的数超过int型,这里提供一下几种解决方法
1.整数后面加L或者l
long c = 12345678900L; //加L或者l表示以long编译
2.写成浮点数形式(double表示的范围更广)
在java中,直接写整数常数,被默认为int型,整数后面加L可以转化成long型。
直接写浮点常数,被默认为double型,整数后面加f可以转化成float型。
double e = 12345678900.0; //以double形式写数字常量,编译可过
二、unsigned int的处理方法
java没有unsigned int类型,笔者使用了移位的方法表示了无符号整型的最大值
private static final long UNSIGNED_INT_MAX = (1L << 32) - 1;
顺便一提,可以用这种方法定义常量字符,代替C语言的宏定义。
基本数据类型介绍
基本数据类型主要有这几个:
byte、short、int、long、float、double、char、boolean
可以分为三类:
- 数值类型:byte、short、int、long、float、double
- 字符类型:char
- 布尔型:boolean
byte
- byte是8位的数据类型,占用1个字节(8bit),默认值是0,它的取值范围是(-2^7) ~ (2^7-1),也就是 -128 ~ 127之间,所以最大存储数据量是255;
- byte一般在大型数组中使用,来代替整数,因为byte变量占用的空间只有int的1/4。
- byte使用示例: byte a = 10,byte=-10。在使用byte数据类型的时候需要注意取值范围!!!
short
- short是16位的数据类型,占用2个字节,默认值是0,它的取值范围是(-2^15) ~(2^15-1),也就是 -32768 ~ 32767之间,所以最大数据存储量是65536;
- short虽然是int型变量所占空间的1/2,但是在实际中却很少用到。在大型数组中也可以节省空间。
- short使用示例:short a=100,short b=-200;
int
- int是32位的数据类型,占用4个字节,默认值是0,它的取值范围是(-2^31) ~(2^31-1),也就是 -2147483648 ~ 2147483647之间,所以最大数据存储量是2^32-1;
- int是数据类型是整型,是我们在项目中用到最多的数据类型之一;
- int 使用示例:int a=1000,int b=-2000;
long
- long是64位的数据类型,占用8个字节,默认值是0L,它的取值范围是(-2^63) ~(2^63-1),也就是 -9223372036854775808 ~ 9223372036854775808之间,所以最大数据存储量是2^64;
- long是数据类型是长整型,是我们在项目中用到最多的数据类型之一。在使用long类型的数据时最好在数值末尾带上大写的L!
- long 使用示例:long a=1000L,long b=-2000L;
float
- float是32位的数据类型,占用4个字节,默认值是0,它的取值范围是3.4e-45 ~ 1.4e38 之间;
- float是数据类型是单精度,在直接赋值时必须在数字后加上f或F。
- float使用示例:float a=10.25f, float b=-20.35F;
double
- double是64位的数据类型,占用8个字节,默认值是0,它的取值范围是4.9e-324 ~ 1.8e308 之间;
- double是数据类型是双精度,在直接赋值的时候最好加上D或d。
- double使用示例:double a=10.123d, double b= -10.25644D;
boolean
- boolean是布尔类型,占用1个字节,只有两个值,false和true,默认值是 false。
- boolean只能用一种标志来记录 true或false,一般和 if 结合使用。
- boolean使用示例: boolean a=true,boolean b=false;
char
- char是字符类型,占用2个字节,默认值为空,取值范围 为 0~65535,也就是 \u0000 ~ \uffff。
- char数据类型可以储存任何字符。
- char 使用示例: char a=1,char b=’A’;
数值类型的级别从低到高分别为:
byte,char,short(这三个平级)——>int——>float——>long——>double
其中由低级别转到高级别,是属于自动类型转换,这点是由系统自动转换的。
例如将int类型的数据转为float类型的数据。
示例:
int i=10;
float j=i;
System.out.println("i:"+i+",j:"+j);
结果:
i:10,j:10.0
如果由高级别转为低级别,则需要强制转换,也就是强制类型转换。
例如将int类型的数据转换为byte类型的数据。
示例:
int i=127;
int j=128;
byte bye=(byte)i;
byte bye2=(byte)j;
System.out.println("i:"+i+",bye:"+bye);
System.out.println("j:"+j+",bye2:"+bye2);
结果:
i:127,bye:127
j:128,bye2:-128
说明:因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。所以在进行强制类型转换的时候,要注意取值范围!
在强制转换的时候需要注意数据的精确度,否则可能会出现数据精确丢失。
例如 double类型的数据转换为float类型数据。
示例:
double d=10.1111115;
float f=(float) d;
System.out.println("f:"+f+",d:"+d);
结果:
f:10.111112,d:10.1111115
了解了数据类型的级别之后,如果用不同的数据类型进行计算,那么最终的数据类型又是哪一种呢?
这里我们用这几种来测试:
1.byte 类型的数据 加 short 类型的数据;
2.short 类型的数据 加 int 类型的数据;
3.int 类型的数据 加 long 类型的数据;
这里我们使用这个方法来获取最终的数据类型
public static String getType(Object o){
return o.getClass().toString();
代码:
short a=1;
byte b=2;
int c = 3;
long d = 4;
System.out.println(getType(a));
System.out.println(getType(b));
System.out.println(getType(c));
System.out.println(getType(d));
System.out.println(getType(a+b));
System.out.println(getType(a+c));
System.out.println(getType(c+d));
结果:
class java.lang.Short
class java.lang.Byte
class java.lang.Integer
class java.lang.Long
class java.lang.Integer
class java.lang.Integer
class java.lang.Long
看到结果是不是有点吃惊呢?那么是为什么呢?
这里的不同的数值类型数据进行相加的时候,会自动转换为级别最高的那一个。
那么short 类型的数据加 byte 类型的数据为什么是int类型呢?
因为在java的世界里,如果比int类型小的类型做运算,java在编译的时候就会将它们统一强转成int类型。
如果上述不好理解的,那么这里我们来做个实验测试下,通过结果来进行验证。
示例:
short a=1,b=2;
byte c=3,d=4;
System.out.println(getType(a+b));
System.out.println(getType(c+d));
结果:
class java.lang.Integer
class java.lang.Integer
那么这里可以得出结论,在数值类型中,若级别小于int,进行计算的时候,最终的数据类型会自动转换为int,如果高于int,最终数据结果会取其中最高的一个!
oo_project_2java数据类型范围及测试的更多相关文章
- 变更mysql的数据类型兼容小数测试
来吧 我也没想到有一天要做这个测试: 想分为这几步吧: 1.先看看mysql本身支不支持数据的变更 2.再看看mybatis能不能用int接受double和decimal 先看下mysql: alte ...
- js 数据类型 typeof的测试
, t2 = ', t3 = null, t4 = NaN, t5 = undefined, t6 = function() {}, t7 = true, t8 = window, t9 = docu ...
- 面试官:讲讲Redis的五大数据类型?如何使用?(内含完整测试源码)
写在前面 最近面试跳槽的小伙伴有点多,给我反馈的面试情况更是千差万别,不过很多小伙伴反馈说:面试中的大部分问题都能够在我的公众号[冰河技术]中找到答案,面试过程还是挺轻松的,最终也是轻松的拿到了Off ...
- Python基础语法-基本数据类型
此文档解决以下问题: 一.Python中数值数据类型——整型(int).浮点型(float).布尔型(bool).复数(complex) 1.float()函数的运用 2.int()函数的运用 3.t ...
- python基础一数据类型之列表
摘要: python基础一中写到列表,那么这篇主要讲列表. 1,定义列表 2,列表.元祖.字符串都属于序列,都可以用用索引和切片. 3,列表的方法 1,定义列表 list1 = ['a','b',1, ...
- 「C语言」数据类型及混合运算与类型转换
深入学习C语言时,有必要先了解一下数据类型的概念,以及它们之间的混合运算与类型转换. 本篇文章便是根据<C语言程序设计教程>和在线翻阅资料后整理而出.(练习题将逐步更新) 目录: ...
- Hive(二)【数据类型、类型转换】
目录 一.基本数据类型 案例实操 二.集合数据类型 案例实操 Map类型 三.类型转换 1.隐式类型转换 2.显示(强制)类型转换 一.基本数据类型 HIVE MySQL JAVA 长度 例子 TIN ...
- Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程
[保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...
- HANA SQL
约束 注释 你可以给你的 SQL 语句添加注释来增加可读性和可维护性. SQL 语句中注释的分隔如下: l 双连字符“--”.所有在双连字符之后直到行尾的内容都被 SQL 解析器认为是注释. l ...
随机推荐
- _groovy
_groovy与beanshell类似,只是它执行的是apache groovy脚本,并返回结果. 如果定义了属性 “groovy.utilities”,属性将会被脚本引擎加载,这样就可以定义一些通用 ...
- quartz CronExpression
一.Quartz Cron 表达式支持到七个域 名称 是否必须 允许值 特殊字符 秒 是 0-59 , - * / 分 是 0-59 , - * / 时 是 0-23 , - * / 日 是 1-31 ...
- mysql DATETIME和TIMESTAMP类型
以mysql 5.7.20 为例 一直以来,理解有偏差,作此记录,纠正 一.DATETIME和TIMESTAMP 都有高达微秒(6位)的精度 范围 DATETIME 1000-01-01 00: ...
- Codeforces - 1194E - Count The Rectangles - 扫描线
https://codeforc.es/contest/1194/problem/E 给5000条正常的(同方向不会重叠,也不会退化成点的)线段,他们都是平行坐标轴方向的,求能组成多少个矩形. 先进行 ...
- 【JAVA】毕向东Java基础视频教程-笔记
传智播客-毕向东Java基础视频教程 <2013年-33days>版-学习代码记录 链接: GitHub库:JavaBXD33 目录 01-Java基础知识 02-Java对象细节 03- ...
- 基于TMS320C6455、XC5VSX95T 的6U CPCI无线通信处理平台
基于TMS320C6455.XC5VSX95T 的6U CPCI无线通信处理平台 1. 板卡概述 本板卡由我公司自主研发,基于CPCI架构,符合PICMG2.0 D3.0标准,包含双TI TMS3 ...
- Linux就该这么学11学习笔记
参考链接:https://i.cnblogs.com/EditPosts.aspx?opt=1 文件传输协议 一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式 ...
- python类中方法__str__()和__repr__()简单粗暴总结
在交互式模式下,类中同时实现__str__()和__repr__()方法: 直接输入实例名称显示repr返回的类容: 用print打印实例名称显示str返回的内容: >>> clas ...
- linux篇—Nginx反向代理负载均衡
一.环境准备 反向代理功能架构 3台web服务器,组建出web服务器集群 web01 10.0.0.7 172.16.1.7 web02 10.0.0.8 172.16.1.8 web03 10.0. ...
- jffs2镜像制作
自己被自己绊住了,出于对无知的恐惧,总觉得是很难的一件事情. demo board ltp-ddt qspi_mtd_dd_rw error:can't read superblock on /dev ...