三、Java架的基本类型

八种基本类型

在这里插入图片描述

3.1 int

-整数的直接量为int
直接量(lieral)表示直接写出的整数

int a = 100//100就是直接写出整数,类型默认为int。

整数直接量必须在int范围内
除了十进制书写形式外,整数的直接量经常表示为十六进制数值,0X或0x或者八进制的0开头

int c = 0x10;//16进制整数直接量
int d = 020;//8进制整数直接量
System.out.println(c);//16
System.out.println(d);//16

整数的除法运算的取整
除法运算保留整数部分,舍弃小数部分

//2.整数除法运算中的取整
int q = 5/3;//1
System.out.println(q);
int total = 87;
int error = 23;

int percent = error / total * 100;
System.out.println(percent + " %");//0

percent = 100 * error / total;
System.out.println(percent + "%");//26

运算数要防止溢出发生
整数运算的溢出:两个整数进行运算时,其结果可能会超出整数的范围而产生溢出。

//3.防止整数运算发生溢出
byte w = (byte)(127 + 1);
System.out.println(w);//-128

3.2 long

表示较大整数的时候,int范围不够的情况下,范围:-2^63 ~(2^63)-1
表示long类型的直接量,需要以L或I结尾。

long l1 = 2147483647;//对的
long l2 = 2147483648;//编译错误,超出整数直接量的范围,也就是int值得范围。

3.2.1 long类型进行较大整数的运算

较大整数:超过int范围的整数

long distance1 = 1000*365*24*299792458;//使用较大整数运算
/*
* 4个int类型的值相乘结果一定为int,且超出了int的范围,
* 再将值赋值给long类型,则结果时错误的
*/
System.out.println(distance1);//4个int相乘结果一定为int,则超出int范围导致溢出!
long distance2 = 1000*365*24*299792458L;
System.out.println(distance2);//4个int乘long,结果一定为long

3.2.2 通过时间毫秒数来存储时间和日期

  • JDK提供了一个方法,返回1970年1月1日0点0分0秒到此时此刻所经历的毫秒数,其数据类型为long。
long time = System.currentTimeMillis();
System.out.println(time);
3.2.2.1 案例(计算程序运行时间)
public static void main(String[] args) {
		// TODO Auto-generated method stub
		long time = System.currentTimeMillis(); //获得系统的时间,单位为毫秒
		//一个程序 
		try {
			Thread.sleep(1000); //线程休眠
			} catch (InterruptedException e) { 
				// TODO Auto-generated catch block 
				e.printStackTrace(); 
				}
		long time2 = System.currentTimeMillis();
		System.out.println(time2 - time);
		}

3.3 double

浮点型,小数,包括float和double
double类型的精确度是fload 的两倍,因此double叫双精度浮点数。

3.3.1 浮点数的直接量为double类型

小数的写法有以下几种:
通常写法:3.14、314.0
科学计数法:1.25E2、1.25e2、1.25E-2
eg:1.25E2 1.25*10^2=125.0
默认浮点直接量为double类型。如果需要表示float类型,则需要在末尾加F或f。

float f = 1.253555155F;

3.3.2 double运算时会出现舍入误差(面试)

二进制无法舍入误差
确切的表示1/10,就和10进制无法精确表示1/3一样
二进制表示进制可能会有误差

double money = 3.0;
double price =2.9;
System.out.println(money - price);//输出结果为0.100000000009 舍入误差!

3.4 char

本质16位无符号的整数,对应的字符集的编码。
采用的编码是Unicode编码(世界通用的定长字符集,所有字符都是16位)。

//字符型
char c1 = '中';
char c2 = '\u4e2d';
char c3 = (char) (c1 + 1);
int i = '中' + 1;//'中' 20013
//0000 0000 0001 0000 == 16
int z = '中';//20013
char c4 = '1';
char c5 = 1;//ASCII码值
System.out.println(c1);//中
System.out.println(c2);//中
System.out.println(c3);//不认识的汉字 丮
System.out.println(i);//20014
System.out.println(z);//20013
System.out.println(c4);//1
System.out.println(c5);//_

3.4.1 对char型变量进行赋值

整数变量:0~65535之间的整数数值
字符直接量:用单引号括起来的内容就为字符的实际内容’A’、‘1’
Unicode形式:‘\u004e’、‘\u4e2d’,Unicode的16进制形式

//1.char型变量赋值
char c1 = 65;
char c2 = 'A';
char c3 = '\u0041';
System.out.println(c1);//A
System.out.println(c2);//A
System.out.println(c3);//A

3.4.2 使用转义字符

对于不方便输出的字符采用转义

转义含义
\n回车符
\r换行符
单引号
"双引号
\单斜杠

3.5 boolean

boolean是逻辑运算类型
赋值只有TRUE或者FALSE
经常用于存储关系运算的结果值

//2.逻辑运算
int age = 18;
boolean isChild = age > 16;
System.out.println(isChild);//true

3.6 基本数据类型之间的转化(重点)

3.6.1 基本类型转换

自动类型转换(隐式类型转换):小类型–>大类型
可以自动转换的,且大小关系如下图:
在这里插入图片描述
强制类型转换:大类型–>小类型
需要转化符,格式为:(需要转换的类型)变量

注意:转换过程中可能会出现精度丢失或溢出。

3.6.2 强制转化的精确度丢失和溢出

//3.精度丢失和溢出
int a = 100;
int b = 200;
long c = a + b;//自动类型转换
System.out.println(c);//300
long l1 = 1024l;
int i = (int)l1;//强制类型转换
System.out.println(i);//1024 没有超出int的范围
long l = 1024L*1024*4*1024;
int j = (int)l;
System.out.println(j);//0 当超过long的最大值就会返回到long的最小值重新计时(就像一个环形球一样)
double pi = 3.141592654789456132; //最大输出小数点后15位
double pi1 = 3.141592654789456132; //最大输出小数点后7位

精度丢失:转化后存储的小数位不是原来的小数位。

3.6.3 数值运算时的自动转换

多种基本类型参与的表达式运算中,运算结果会自动向较大的类型转换。

//3.多种基本类型参与运算会向较大类型转换
long l3 = 123*456*789L;//int*int*long 向long转化
double d = 500-599.0;//-99.0
double persent2 = 80/100.0;//0.8

3.6.4 byte、short、char转换为int

byte、short、char实际存储数值都为整数
在参与运算时,将会byte、short、char都转化为int在进行运算。

short x = 12;
byte y = 3;
char z = 'A';
int res = x + y + z;//65+3+12
System.out.println(res);//80

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值