十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【java】数据类型与变量

【java】数据类型与变量 字面常量6 种字面常量分类a字符串常量由 括起来的⽐如12345、hello、你好。b 整型常量程序中直接写的数字(注意没有⼩数点)⽐如100、1000c浮点数常量程序中直接写的⼩数⽐如3.14、0.49d字符常量由 单引号 括起来的当个字符⽐如‘A’、‘1’e布尔常量只有两种true和falsef空常量nullpublic static void main1(String[] args) { //字符串常量 System.out.println(hello world); //整型常量 System.out.println(100); //浮点常量 System.out.println(3.14); //字符常量 System.out.println(A); //布尔常量 System.out.println(true); System.out.println(false); }数据类型Java 数据类型总分类a基本数据类型8 种存的是数值本身b引用数据类型类、接口、数组、String字符串等存的是内存地址基本数据类型注a固定字节int永远占 4 字节long永远占 8 字节不受操作系统 16/32/64 位影响b带符号整型、浮点型默认都是负数‑正数双向范围c默认类型规则d整数字面量默认是 int 类型写long类型数字必须末尾加Llong num 100L;e小数字面量默认是 double 类型写float小数末尾必须加Ffloat num 3.14F;fString字符串不属于基本类型属于引用数据类型public static void main(String[] args) { byte b10; short s100; int i1000; long l100L; float f100.5f; double d5.66; char cA; boolean flagtrue; }变量变量概念在程序运行中值可以发生改变的量叫做变量数据类型规定变量存放什么类型的数据语法格式数据类型 变量名 初始值;public static void main(String[] args) { int a10; //整型变量 double d3.14; //小数变量 char cA; //单个字符变量 boolean btrue; // 布尔变量 System.out.println(a); System.out.println(d); System.out.println(c); System.out.println(b); // 赋值 a100; System.out.println(a); //一行定义多个同类型变量 int a110,a220,a330; System.out.println(a1); System.out.println(a2); System.out.println(a3); }整型变量两种定义写法a方式 1定义变量的时候直接赋值int a 10; System.out.println(a);一步完成声明变量 赋初始值不会报未初始化错误b方式 2先声明后赋值int b; //只创建变量没有给值 b 10; //后面再赋值 System.out.println(b);核心规则打印、使用变量之前必须完成赋值Java 要求局部变量使用前必须初始化不会自动给默认值int 的数值范围//int 最小值 -2147483648 System.out.println(Integer.MIN_VALUE); // int 最大值 2147483647 System.out.println(Integer.MAX_VALUE);超出范围会使编译报错int 注意事项总结a字节大小固定int永远占4 个字节 (32 位)不受 Windows、Mac 等操作系统影响b优先用int a 0;这种初始化写法无合适初值就填 0c赋值不能超过 -2147483648 ~ 2147483647超出会溢出d局部变量用之前必须赋值不然编译失败e包装类int基本数据类型→ Integer引用包装类型长整型变量赋值后缀必须加L内存大小long 固定占 8 个字节 (64 位)不受操作系统影响取值范围最小值‑9223372036854775808最大值9223372036854775807包装类基本数据类型long小写对应的包装类Long大写引用类型int a1; long b10; long c10l; long d10L; System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); //long 所能表示的范围 System.out.println(Long.MAX_VALUE); System.out.println(Long.MIN_VALUE);短整型变量占用内存short属于短整型固定占 2 字节 (16 位)取值范围a-32768 ~ 32767b包装类基础类型short对应的引用类型包装类为 ShortShort.MIN_VALUEshort 最小值常量Short.MAX_VALUEshort 最大值常量使用场景开发中short很少用一般优先用int坑点Java 中两个 short 变量相加结果会自动提升为 int//两个short向加自动转为int型 short x1; short y2; // short zxy; 报错 int zxy; System.out.println(z);short a10; System.out.println(a); //short类型能表示的范围 System.out.println(Short.MAX_VALUE); System.out.println(Short.MIN_VALUE);字节型变量占用内存1 字节 (8 位)固定大小不受操作系统影响取值范围‑128 ~ 127最小值Byte.MIN_VALUE -128最大值Byte.MAX_VALUE 127byte a10; System.out.println(a); System.out.println(Byte.MAX_VALUE); System.out.println(Byte.MIN_VALUE);包装类Byte基本类型byte→引用类型Byte易错点整数字面量默认是 int 类型byte b1 127; //正确数字在‑128~127之内 byte b2 128; //报错超出byte范围byte 做运算时会自动提升为 intbyte b11; byte b23; byte b3(byte)(b1b2); //强制类型转换 System.out.println(b3); byte b4b1b2; //编译报错byte做运算自动转为int System.out.println(b3);浮点型变量双精度浮点数小数默认就是 double 类型不需要加后缀double d 3.14; System.out.println(d);坑点 1整数相除规则int ÷ int结果还是 int直接砍掉小数部分想要得到小数结果必须让其中一个数变成浮点型//int 整数除法舍去小数 System.out.println(5/2); //有一个浮点结果就是浮点 System.out.println(5.0/2); System.out.println(5/2.0); System.out.println(5.0/2.0);//整数相处 int a1; int b2; System.out.println(a/b); //是0 不是0.5 为什么 double x1; double y2; System.out.println(x/y); //是0.5坑点 2浮点精度丢失double num 1.1; System.out.println(num * num); //1.2100000000000002不是精确的 1.21原因double/float 遵循 IEEE‑754 存储标准二进制无法精准表示所有十进制小数浮点数存储的是近似值不是精确值注adouble在任何系统下都占8个字节b浮点数与整数在内存中的存储⽅式不同不能单纯使⽤的形式来计算cdouble的包装类型为Double单精度浮点数基础用法小数默认是 doubledouble (8 字节) 不能直接赋值给 float (4 字节)不加f编译器报错float num 1.0f; //末尾必须加上 f / Ffloat 要点a内存占用4 字节b包装类Floatc精度比 double 更低d实际开发优先用 double很少使用 float字符型变量字面量写法char必须用单引号 包裹并且只能放 1 个字符包装类基本类型char对应的包装类型引用类型CharacterJava 中使⽤ 单引号单个字⺟ 的形式表⽰字符字⾯值底层原理Unicode 编码C 语言 charASCII编码占 1 字节不支持中文Java charUnicode编码占 2 字节支持中文、日文、特殊符号等全世界文字char c1A; char c2b; System.out.println(c1); System.out.println(c2); //java 中的字符可以存整形 char c3数; System.out.println(c3);布尔型变量作用boolean布尔类型专门用来表示真假只有两个结果true代表真false代表假基础语法boolean b true; System.out.println(b); b false; System.out.println(b);注意a取值仅有 2 个只能是true/false没有其他值b不能和整数互相转换boolean valuetrue; System.out.println(value1); //编译报错boolean 不能参加数字运算c包装类boolean的包装类型是Boolean首字母大写d占用字节没有官方明确定义JVM 规范没有规定单个boolean占多少字节在 Oracle HotSpot 虚拟机里boolean 数组里每个元素占 1 字节 (8 位)单独的 boolean 变量一般当作 int (4 字节) 处类型转换⾃动类型转换(隐式)字面量默认规则整数字面量1024、100→ 默认是int小数字面量3.14、5.12→ 默认是double自动转换转换顺序从小到大byte→short→int→long→float→double如果要写float小数必须后面加 F/ffloat f 3.14F; //正确 //float f 3.14; //报错3.14默认是doubledouble不能直接赋值给float如果要写long大数后面加 L/llong b 10L;自动转换小范围 → 大范围自动完成不用强转aint → longint a 100; long b 10L; b a; //int 转换成long Lfloat - double// float - double float f3.14F; double d5.12; df; System.out.println(d);大范围 → 小范围 不能自动转换代码直接报错long x22L; int y10; yx; System.out.println(x);强制类型转换(显式)强制类型转换强制类型转换显式转换当把数据范围大的类型赋值给数据范围小的类型时无法自动转换必须手动加上(目标类型)完成转换自动转换隐式转换不用强转范围小 → 范围大程序自动完成int a 10; long b 100L; b a; //int(小) → long(大)隐式转换自动完成强制转换显式转换必须手写语法格式目标类型 变量名 (目标类型) 待转换的值;//强制类型转换 int a1; long b2L; a(int)b; //long(大) ---- int(小) System.out.println(a);注意事项a隐式转换方向小范围 → 大范围byte,short,int → long → float → doubleb大范围 → 小范围强制转换可能丢失精度、数据溢出小数转整数直接舍弃小数部分 (int)3.99 → 3大数转小容器数值溢出结果出错c字面常量赋值检查直接写数字常量赋值给 byte/shortJava 会自动判断数字是否越界没越界不用强转d不相干类型不能强转例如字符串String不能直接强转为 intbyte b1100; //100是int整数 在byte(-127--128)的范围内自动隐式类型转换 byte b2(byte)257; //277 不在byte(-127--128)的范围内需要强转, 显示类型转换 System.out.println(b1); // 100 System.out.println(b2); // 1 , 思考为什么是1强制类型转换1byte 取值范围byte占 1 字节 8 位范围‑128 ~ 127最多只能存 256 个数字2计算原理溢出二进制截断a257 的二进制0000 0001 0000 0001int 是 32 位b强制转成 byte只保留最后低 8 位0000 0001c0000 0001转为十进制就是1补充对(byte)数字结果等价于数字 % 256如257 % 256 1注意强制转换溢出后不会报错直接得到一个错误数值写代码时一定要注意类型提升核心规则不同类型的数据混合运算时取值范围小的数据会自动提升为范围大的类型再进行计算最终结果 提升后的大类型类型大小排序从小到大byte→short→int→long→float→doubleint与long之间int会被提升为longint a10; long b20L; //int c ab; //编译报错ab-- int long 把int提升为long》》 long long int 会丢失数据 long dab; //这样是ok的ab-- int long 把int提升为long》》 long long long System.out.println(d);解释a(int)和b(long)运算a自动提升成longab结果是longlong赋值给int属于大转小不能自动转换报错long赋值给long是ok的byte与byte的运算byte x10; byte y20; // byte zxy; //编译报错byte做运算时会转换成int(4个字节int的值赋给byte属于大转小需要强制类型转换 byte q(byte)(xy); //这样是OK的做了强制类型转换 System.out.println(q);报错根本原因CPU 读写数据默认以 4 个字节为单位byte只有 1 字节只要做加法运算byte、short 会强制先提升为 int再计算所以ab的结果是int类型把int直接放进byte变量就报错类型提升总结a多类型混合运算小范围→自动提升到大范围bbyte、short小于 4 字节运算前一律提升为 int结果也是 intcchar运算时也会提升为int字符串类型啥是StringString不是基本数据类型它是 Java 提供的一个类引用类型用来存放一串文字字符串使用双引号包裹字符串的号代表拼接文字String s1hello ; String s2world; System.out.println(s1); System.out.println(s2); System.out.println(s1s2);字符串和数字之间互相转换1int → String数字转字符串int num10; // 写法1 数组加字符串 String s1num ; System.out.println(s1); //方法2调用官方方法 String s2String.valueOf(num); System.out.println(s2);转换之后str1里面存的是文本10不再是可以加减的数字2String → int字符串转数字//前提字符串里必须是全数字 String s1100; int numInteger.parseInt(s1); System.out.println(num);前提字符串里面必须是纯数字文字否则报错易错坑点//易错点 System.out.println(1020abc); //先算102030再拼接abc System.out.println(abc1020); //碰到字符串之后后面全部变成拼接小结aString 字符串双引号属于引用类型b遇到字符串就是拼接cint 转 String变量 或者String.valueOf()dString 转 intInteger.parseInt(字符串)
返回列表