Java中有两大数据类型:基本数据类型、引用类型(String Math ArrayList)【无数种】
※基本数据类型(8种)
--定义一个变量 类型 标识符 java是强类型语言 【兼容的数据才可以赋值到该类型的变量中进行存储】
--byte 字节型 1个字节 8位 【最高位是符号位】 -128~+127
--short 短整型 2个字节 16位 【最高位是符号位】 -32768~+32767
--int 整形 4个字节 32位 【最高位是符号位】 -21亿~21亿 -2147483648~2147483647
--long 长整形 8个字节 64位 【最高位是符号位】 -922亿亿~922亿亿 -9223372036854775807~9223372036854775808
注意:超过int范围是要使用L或者l来表示为long类型的数据
在java中所有整型数值默认为int类型(计算器也是一样取整数%*/号都是取余数详细计算 ed:78.9%10=8)
//注意:【特殊情况】 不确定性:不确定两数相加的和是不是会超出范围,因此编译出错 【byte\short】
/**
*
* @Author Lantzrung
* @Date 2022年7月16日下午5:23:59
*
**/
byte item1 = 2;//102
byte item2 = 3;//103
byte item3 = item1+item2;//编译错误:不兼容的类型: 从int转换到byte可能会有损失 [原因:两
//数相加的和是大于127]
solution:byte item4 = (byte)(item1+item3)
System.out.println("item4="+item4);//结果:-51
//205-128-->77-->-127+77-->-50 因为0不用算故此 要向前移动一位 -50-1-->-51
//(int强转byte类型容量不足,溢出,故从byte类型的最小值取值开始)
byte b = 182;//编译错误: 不兼容的类型: 从int转换到byte可能会有损失
solution:byte b = (byte)182;结果:-74
//(int强转byte类型容量不足,溢出,故从byte类型的最小值取值开始)
byte b1 = 2;//程序能输出2
short s = 45182;//编译错误:不兼容的类型:从int转换到short可能会有损失
solution: short s1 = (short)45182;//结果:-20354 和上述同理
int i = 21000000000;//编译错误:过大的整数:21000000000 210亿 int最大的整数值为21亿左右
long l = 21000000000;//错误:过大的整数:21000000000
solution:long l1 = 21000000000L;//在过大数值中加上L的字母就可以把int类型数组提升为long类
//型数组
System.out.println(l1);//210000000000
int item1 = 67;
byte item2 = item1;//编译error:不兼容的类型:从int转换到byte可能会有损失
solution:byte item2 = (byte)item1;//67 强转
short item3 = item1;//编译error:不兼容的类型:从int转换到short可能会有损失
solution:short item3 = (short)item1;//67 强转
--float 单精度浮点型 4个字节 32位(bit)
1位符号位(第31位) 8位是指数位(第30-23位) 32位是尾数位(第22-0位) 使用f或者F后缀表示float型数值 float的精度(小数值)为7~8有效数字 (-1.4E45 ~ 3.4E38) ( -2^128~ 2^128)
--double 双精度浮点型 8个字节 64位(bit) 1位符号位(第63位) 11位是指数位(第62-52位) 52位是尾数位(第51-0位) double的精度为16~17位有效数字 (-2^1024~2^1024)
在java中所有浮点型数值默认为double类型
public class Demo2{
public static void main(String[] args){
float a = 16.33;
System.out.println(a)
}
}
--相同字节数的浮点类型数据比整型的数据类型保存的数值要大 可以使用科学计算法的表示:
19896.72 ---> 1.989672*10^4 --->1.989672e4
1989.672 ---> 1.989672*10^3 --->1.989672e3
--浮点运算的精确度(正无限大和负无限大)
--可以使用下划线来分隔数值
double d1 = 1.989672e4;
System.out.println(d1);//19896.72
double d2 = 1.989672e3;
System.out.println(d2);//1989.672
//可以使用下划线来分隔数值
int item = 45_89_65_451L;
System.out.println(item);
--布尔型:boolean true|false
public class Demo{
public static void main(String[] args){
boolean ok = false;
boolean pass/*通过*/ = (3>2);
System.out.println(pass);//true
}
}
--char 16个字节 单字符类型
1、使用单引号描述 "c"表示为字符串 'c'表示为单字符
2、char中的变量只能存放一个字符 【字母、数字、符号、中文】
3、编码 字符转换为2进制的数值 进行存储 ASCII码(128bit) UNIcode(UTF-8)(存放中文)
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统
二进制--->10进制--->字符
--unicode是国际通用编码,utf-8编码是unicode编码在网络之间(主要是网页)传输时的一种“变通”和“桥梁”编码。utf-8在网络之间传输时可以节约数据量。编码进行存放
--设置int_value变量得出char存放UNIcode的数值,后使用计算器输入数值,转编码16进制 UTF-8形式的编码 ‘\uxxxx’
--solution:int int_value = c;//-->Output result:21000 -->使用计算器输入value得出HEX(十六进制) --> 4e2d -->再令c4='\u4e2d' -->char就会通过UTF-8数值得出中文而不是通过ASNI编码格式进行存储;
比如:中-->int_value-->20013(使用计算器16进制)-->'\u4e2d'
/**
*
* @Author Lantzrung
* @Date 2022年7月16日下午5:27:43
*
**/
public class Demo{
public static void main(String[] args){
char c = 'c';//c
char c1 = "c";//complie error:不兼容的类型:String类型无法转换为char类型
char c1 = 'abc';//compile error:未结束的字符文字;
char c2 = "abc";//compile error:不兼容的类型:String类型无法转换成char类型
char c3 = '中';//char类型数组用ASNI编码格式进行存储,Output result:中
demand:需要把char c3 ='中'转码为UNIcode的数值;
solution:int int_value = c;//-->Output result:21000 -->使用计算器输入value得出HEX(十
//六进制) --> 4e2d -->再令c4='\u4e2d' -->char就会通过UTF-8数值得出中文而不是通过ASNI编
//码格式进行存储;
char c4 = '\u4e2d';//UTF-8编码格式
System.out.println(c1);//中
}
}