数据类型
java是一种强类型语言,每个变量都必须声明其数据类型
1、强弱类型语言
-
强类型语言
是一种强制类型定义的语言,变量一旦定义了数据类型,如果不进行强制转换,那它就只能是这个类型。Java、.net 、Python、C++等语言都是强类型语言
public static void main(String[] args){ int num ; //System.out.println(num); //Variable 'num' might not have been initialized //没有初始化的变量无法被使用 }
-
弱类型语言
是一种弱类型定义的语言,变量可以根据环境变化自动进行转换数据类型,不需要经过显性强制转换
-
区别
判别的根本是是否会隐性的进行语言类型转变。强类型语言在速度上略逊于弱类型语言,但是强类型定义语言带来的严谨性又能避免不必要的错误,提高了安全性
2、数据类型
在Java中数据类型分为两类:基本类型(primitive type)和引用类型 (reference type)
-
基本类型
整数默认是int类型,定义long类型时要在数值后加上L或l
浮点数默认是double类型,定义float类型时要在数值后加上F或f-
基本数据类型 占内存(字节) 取值范围 默认值 byte 1 -128~127 (byte)0 short 2 -32768~32767 (short)0 int 4 -2147483648~2147483647 即 -215~215-1 0 long 8 -2^31 ~ 2^31-1 0L float 4 负数:-3.402823E38 ~ -1.401298E-45 正数:1.401298E-45 ~ 3.402823E38 0.0F double 8 负数:-1.79769313486232E308~-4.94065645841247E-324 正数:4.94065645841247E-324~1.79769313486232E308 0.0 char 2 Umicode字符,用单引号括起来,如'a'、'啊' '\u0000' booleam 1 true,false false public static void main(String[] args){ int num_int = 100; long num_long = 51321561584132185L; short num_short = 2355; double num_double = 3.5;//双精度 double num_double1 = 3; float num_float = (float)3.5; //单精度 float num_float1 = 3.5F; boolean isPass = true; boolean isOk = false; boolean isBig = 88>5; char f = '女'; char m = '男'; }
-
引用类型的大小统一为4个字节,记录的是其引用对象的地址
Java中JDK对每种基本类型都进行了包装,每个类型都有对应的包装类供开发者使用
public static void main(String[] args){
//byte
System.out.println("byte = java.lang.Byte");
System.out.println("SIZE"+Byte.SIZE);
System.out.println("MIN_VALUE"+Byte.MIN_VALUE);
System.out.println("MAX_VALUE"+Byte.MAX_VALUE);
System.out.println();
//short
System.out.println("short = java.lang.Short");
System.out.println("SIZE"+Short.SIZE);
System.out.println("MIN_VALUE"+Short.MIN_VALUE);
System.out.println("MAX_VALUE"+Short.MAX_VALUE);
System.out.println();
//int
System.out.println("int = java.lang.Integer");
System.out.println("SIZE"+Integer.SIZE);
System.out.println("MIN_VALUE"+Integer.MIN_VALUE);
System.out.println("MAX_VALUE"+Integer.MAX_VALUE);
System.out.println();
//long
System.out.println("long = java.lang.Long");
System.out.println("SIZE"+Long.SIZE);
System.out.println("MIN_VALUE"+Long.MIN_VALUE);
System.out.println("MAX_VALUE"+Long.MAX_VALUE);
System.out.println();
//float
System.out.println("float = java.lang.Float");
System.out.println("SIZE"+Float.SIZE);
System.out.println("MIN_VALUE"+Float.MIN_VALUE);
System.out.println("MAX_VALUE"+Float.MAX_VALUE);
System.out.println();
//double
System.out.println("double = java.lang.Double");
System.out.println("SIZE"+Double.SIZE);
System.out.println("MIN_VALUE"+Double.MIN_VALUE);
System.out.println("MAX_VALUE"+Double.MAX_VALUE);
System.out.println();
//char
System.out.println("char = java.lang.Character");
System.out.println("SIZE"+Character.SIZE);
System.out.println("MIN_VALUE"+Character.MIN_VALUE);
System.out.println("MAX_VALUE"+Character.MAX_VALUE);
}
关于字节
位(bit),是计算机的最小存储单位,例:11001100这是一个八位二进制数
字节(byte),是计算机中数据处理的基本单位,1byte = 8bit
字符,是指计算机中使用的字母、数字、汉字和符号
3、编码
计算机启动、编译、程序的执行都需要基于计算机的编码系统,负责电脑内部代表字母或数字的方式。常用的有ASCII编码、UTF-8编码、Unicode编码等
-
ASCIIS
表示符 占用大小 1个英文字符不区分大小写 1byte 1个中文汉字 2byte 1个ACIIS码 1byte -
UTF-8
表示符 占用大小 1个英文字符 1byte 英文标点 1byte 1个中文 3byte 中文标点 3byte -
Unicode
表示符 占用大小 1个英文字符 2byte 英文标点 2byte 1个中文 2byte 中文标点 2byte
4、拓展
在计算机汇编语言中,常用的进制有二进制、八进制和十进制。
- 二进制,只有0、1
- 八进制,要求以0开头,如:0100、0214
- 十进制,就是日常使用的整数,50、100、-52
- 十六进制,要求以0x或0X开头,如0x1、0X457
public static void main(String[] args) {
int i10 = 100;
int i8 = 015;
int i16 = 0x15;
System.out.println(i10);//100
System.out.println(i8);//13
System.out.println(i16);//21
}
由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。浮点数一般都存在舍入误差,很多数字无法精确表示,其结果只能是接近,但不等于;二进制浮点数不能精确的表示0.1,0.01,0.001这样10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示
如果需要进行不产生舍入误差的精确数字计算,需要使用Big Decimal类。Java.math下面的两个有用的类:BigInteger和Big Decimal,这两个类可以处理任意长度的数值
BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。
避免比较中使用浮点数
float f = 0.1f;
double d = 1.0/10;
System.out.println(f == d);//false
float f1 = 132153153215f;
float f2 = f1 + 1;
System.out.println(f1 == f2);//true
单引号用来表示字符常量。char 类型用来表示在Unicode编码表中的字符
char c1 = 'a';
char c2 = '你';
System.out.println(c1);
System.out.println((int) c1);//97
System.out.println(c2);
System.out.println((int) c2);//20320
Unicode具有从0到65535之间的编码,他们通常用从’u0000’到’uFFFF’之间的十六进制值来表示(前缀为 u表示Unicode)
char c3 = '\u0061';//a
java还允许使用转义字符来将其后的字符转变为其它的含义
\b | 退格 | \u0008 |
---|---|---|
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\t | 制表符tab | \u0009 |
" | 双引号 | \u0022 |
' | 单引号 | \u0027 |
\ | 反斜杠 | \u005c |
boolean类型有两个值,true和false,不可以 0 或非 0 的整数替代 true 和 false ,用来判断逻辑条件,一般用于程序流程控制
boolean flag = false;
if(flag){
int a = 1;
}else{
int a = 0;
}
在上列判断语句中放上flag也就等于放上了false,因为flag1的值是false,不用再去做判断 flag == false
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!