java基础(3)--8种基本类型
八种基本类型
数据类型分为两大类:基本类型,引用类型
基本类型有8种,除了基本类型(8种)以外任何类型都是引用类型。如: String 是引用类型
基本类型有8种(首字母是小写): 整数:byte, short, int, long 浮点数(小数):float,double 布尔类型:boolean 字符类型: char
整数
整数都是有符号数(补码):
byte 8位补码 -128 ~ 127
short 16位补码 -32768 ~ 32767
int 32位补码 约-21亿 ~ 21亿 -2^31 ~ 2^31-1 -2G ~ 2G-1
long 64位补码 -2^63 ~ 2^63-1
注意点
1)任何整数“字面量”都是 int 类型! 字面量就是直接写出的常数,如:5
2)“整数字面量”在不超过范围情况下可以给“小类型变量”赋值
3)以0x为前缀的是16进制,0前缀的是8进制
4)整数超范围运算会溢出
最常用int,但是要注意范围,short很少使用,byte用于表示文件等底层数据。int a=0x7fffffff; a*2=-2
long 类型
1) 使用L后缀的字面量(直接量) 是long类型
2) 计算机时间规定: long类型 从GMT 1970年元旦开始 累计的毫秒数作为时间, 这个规定:将时间转换为整数long
3) 使用 System.currentTimeMillis() 获得系统时间
4) 时间是一个long整数!
浮点数
详细的float double 的计算规则参考 IEEE 754 标准
1. 由于float 精度比较差,很少使用,大多使用double精度:尾数长度决定 大小范围:指数(小数点位置)决定。float 的精度 没有 int 高,但是float的大小范围比int大。double的精度比float高,double的范围也比float大
int a = 0x7fffffff;
int b = 0x7ffffff0;
System.out.println(a-b);//
System.out.println(a+b);//超过int范围发生溢出了 float fa = a;//损失精度,舍入误差
float fb = b;
System.out.println(fa-fb);//0.0 说明float精度不高,有误差
System.out.println(fa-fb);//正确 float 范围比int大 double da = a;
double db = b;
System.out.println(da-db);//15.0 double精度比int高
System.out.println(da-db);//正确 double比int范围大,比float范围大
2. 浮点数字面量默认是double 类型 D为后缀是double f 后缀是float
3. 浮点数运算的不精确性, 避免使用浮点数进行精确计算。
2.6-2.0不精确 因为底层是将2.6 2.0转换成二进制运算的,2.6不能精确转换成(无限循环),2.0可以精确转换成二进制。所以结果不精确。小数只有.0和.5才能精确转换成二进制。
Java 中精确小数计算的解决方案 ,BigDecimal API类实现了精确的定点小数计算
BigDecimal x = new BigDecimal("2.6");
BigDecimal y = new BigDecimal("2");
BigDecimal z = x.subtract(y);//subtract 减法
z = x.add(y);//加
z = x.multiply(y).multiply(y);//乘法
z = x.divide(y); //除
float和double
float:1bit(符号位) 8bits(指数位) 23bits(尾数位)
double:1bit(符号位) 11bits(指数位) 52bits(尾数位)
范围:float的指数范围为-127~+128,而double的指数范围为-1023~+1024;float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
精度:float和double的精度是由尾数的位数来决定的。float的精度为6~7位有效数字;double的精度为15~16位。float精度由尾数位决定,二进制23位转成十进制约为 7到8位
boolean 类型
只有两个值:true 真, false 假;用来表示判断结果状态的
字符类型
1. 字符是一个16位无符号"整数"! 字符的数值是unicode编码值;char是16位无符号整数,最高位不是符号位,也是数值。范围是0~2的16次方-1 即整数范围:0 ~ 65535
2. unicode编码 8万多字。规定:'中' 编码数字 20013 '田' 编码数字 30000 'A' 编码数值 65 unicode英文编码与ASCII编码一致
3. Java char 类型支持了 i18n(国际化), 就是支持全球文字
4. 在中文本地系统中,字库(字模)只能显示20000+文字!
5. 字符字面量 就是一个char整数字面量 '中'
6. 字符可以参与数学运算
'A' 的编码 65
'B' 66
...
'Z' 90
'0' 48
'1' 49
...
7. 特殊字符,可以使用转义字符书写
'\n' new line 换行
'\r' return 回车
'\t' tab 字符
'\\' \ 字符
'\'' 单引号
'\"' 双引号
'\u4e2d' unicode 16进制编码
8. 控制字符也是字符,如:回车,换行,退格等,但是控制字符输出显示效果不明显
类型转换
自动类型转换 也称为 隐式类型转换。从小类型向大类型转换 , 发生符号位扩展现象。负数扩展为1 ,正数扩展为0
int i = -1;//i 是32位数
long l = i;//l 是64位数, 发生符号位扩展现象
System.out.println(l);//-1
System.out.println(Integer.toBinaryString(i));
System.out.println(Long.toBinaryString(l));
//Long.toBinaryString方法的参数是long类型,在i向long 类型参数传递时候发生了自动类型转换!
System.out.println(Long.toBinaryString(i));
强制类型转换
大类型到小类型的转换。在范围之内的情形,强制转换没有问题。超过小类型范围,发生高位溢出现象。强制类型转换也会发生精度损失。
l = (long)(pi+0.5);//利用强制类型转换实现 4舍5入
System.out.println(l); //4舍5入
注意点
1. java 中 字面量(直接量)之间的运算,在编译期间,优化为运算结果了。
2. Java 中int类型的“字面量”,在不超过小类型范围情况下可以给小类型变量赋值
3. 由于Java编译器,不能确定变量表达式的结果,不允许直接将大类型变量给小类型赋值 。
int n = 2;
char c;
c = 'A'+2;// int 67 没有编译错误
//c = 'A'+n;//编译错误,不能转换int到char
c = (char)('A'+n);
java基础(3)--8种基本类型的更多相关文章
- Java中的两种异常类型及其区别?
Java中的两种异常类型是什么?他们有什么区别? Throwable包含了错误(Error)和异常(Excetion两类) Exception又包含了运行时异常(RuntimeException, 又 ...
- Java基础知识点1:基本类型包装类
基本类型的包装类 简介 通常来说我们在程序中经常会使用元类型,比如 int data = 1; float data = 2.1F; 但是在有些场景中不能直接使用元类型,比如如果我们想要建立一个int ...
- Java基础知识➣环境搭建与类型整理(一)
概述 公司业务需要,产品既要有.NET又需要Java,没得选择,只能业余时间学习Java,整体觉得Java也.NET还是很相似的,只是语法有差别,差别也不是很大,这就将学习Java的基础知识整理下,以 ...
- Java基础之8个基本类型及基本类型间转换
8种基本数据类型 Java语言有8种基本数据类型, 分别用于存储整数.浮点数.字符数据和布尔类型数据.需要注意的是: 现在所介绍的仅仅是基本数据类型,后续还会介绍很多非基本数据类型.基本数据类型如图 ...
- Java基础:8种基本数据类型,取值范围和储存字节说明。
Java中,一共有8种基本数据类型: 4种整数型:int,short,long,byte. 2种浮点型:float,double. 1种字符类型:char. 1种表示真值的类型:boolean. [S ...
- JAVA基础之两种核心机制
突然之间需要学习Java,学校里学的东西早就忘记了,得用最短的时间把Java知识理顺,重点还是J2EE,毕竟所有的ava项目中95%都是J2EE,还是先从基础的J2SE学起吧....... 首先是了解 ...
- Java 基础【09】 日期类型
java api中日期类型的继承关系 java.lang.Object --java.util.Date --java.sql.Date --java.sql.Time --java.sql.Time ...
- Java基础之RTTI 运行时类型识别
运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息. 多态(polymorphism)是基于R ...
- Java 基础【12】 日期类型
java api中日期类型的继承关系 java.lang.Object --java.util.Date --java.sql.Date --java.sql.Time --java.sql.Time ...
随机推荐
- hdu2469(计算几何)
枚举所有可能的半径,然后将所有满足这个半径的点按角度(与x轴正半轴的夹角)排序. 然后一遍扫描求出在这个半径下选k个点所需的最小面积 . 思路还是比较简单,实现略有些繁琐. 要先将点的坐标转换为角度. ...
- A1261. happiness(吴确)[二元组暴力最小割建模]
A1261. happiness(吴确) 时间限制:500ms 内存限制:512.0MB 总提交次数:158 AC次数:72 平均分:56.71 将本题分享到: 查看 ...
- Entity Frameword 查询 sql func linq 对比
Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更多在用Func形式,l ...
- 表达式求值(java)
今天去面试,考了这个,短时间没想出来... 太笨了! 后来想用栈和递归做 但是看了网上才知道,可以将中缀表达式转为后缀表达式,就极其方便了. import java.util.Scanner; imp ...
- Spoken English Practice(not always estimating your status in other's hearts. you will lose yourself when you live in other's look. do your best and walk on you own way.)
绿色:连读: 红色:略读: 蓝色:浊化: 橙色:弱读 下划线_为浊化 口语蜕变(2017/7/8) 英 ...
- MFC DLL获取当前路径
.首先定义此获取模块的静态方法 #if _MSC_VER >= 1300 // for VC 7.0 // from ATL 7.0 sources #ifndef _delayimp_h ex ...
- HTML里引号的输出与显示
关于输入框中显示双引号和单引号 前台显示解决办法: 方法一: 单引号<input type="text" value="'"> 双引号<inp ...
- 我的Android进阶之旅------>关于使用Android Studio替换App的launcher图标之后仍然显示默认的ic_launcher图标的解决方法
前言 最近做了一个App,之前开发该App的时候一直以来都是默认的launcher图标启动的, 今天美工换了一个App的launcher 图标,因此在Android Studio中将默认的lanche ...
- java 使用LinkedList模拟一个堆栈或者队列数据结构
近期在复习下java基础,看了下java基础,在看到集合时突然发现想起来曾经面试有一道笔试题:模拟一个堆栈或者队列数据结构,当时还没做出来,今天就写一下,首先得明确堆栈和队列的数据结构 堆栈:先进后出 ...
- 001-es6变量声明、解构赋值、解构赋值主要用途
一.基本语法 1.1.声明变量的六种方法 参看地址:http://es6.ruanyifeng.com/#docs/let let:局部变量,块级作用域,声明前使用报错 var:全局变量,声明前使用 ...