ARTICLE DETAIL

资讯详情

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

Java中数据类型与变量

Java中数据类型与变量 1. 字面常量常量即程序运行期间固定不变的量称为常量比如一个礼拜七天一年12个月等。publicclassDemo{publicstaticvoidmain(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);//布尔常量}}其中“hello world!”、100、3.14、‘A’、true/false都是常量将其称为字面常量。字面常量的分类字符串常量由括起来的比如“12345”、“hello”、“你好”。整形常量程序中直接写的数字(注意没有小数点)比如100、1000浮点数常量程序中直接写的小数比如3.14、0.49字符常量由 单引号 括起来的当个字符比如‘A’、‘1’布尔常量只有两种true和false空常量null2. 数据类型在Java中数据类型主要分为两类基本数据类型char、int、double等等和引用数据类型。类接口数组基本数据类型有四类八种四类整型、浮点型、字符型以及布尔型八种注意不论是在16位系统还是32位系统int都占用4个字节long都占8个字节整形和浮点型都是带有符号的所以取值范围会少一个符号位整型默认为int型浮点型默认为double字符串属于引用类型3. 变量3.1 变量概念在程序中除了有始终不变的常量外有些内容可能会经常改变比如人的年龄、身高、成绩分数、数学函数的计算结果等对于这些经常改变的内容在Java程序中称为变量。而数据类型就是用来定义不同种类变量的。3.2 语法格式定义变量的语法格式为数据类型 变量名 初始值;比如inta10;// 定义整形变量aa是变量名也称为标识符该变量中放置的值为10doubled3.14;charcA;booleanbtrue;int[]arr{1,2,3,4,5};如果变量没有初始化就使用会报错在C语言中数组定义为 int arr[]{1,2,3,4,5};在Java中数组定义为 int []arr{1,2,3,4,5};为了符合数据类型 变量名 初始值;定义规则Java的定义更为准确3.3 整型变量3.3.1整型变量// 方式一在定义时给出初始值inta10;System.out.println(a);// 方式二在定义时没有给初始值但使用前必须设置初值intb;b10;System.out.println(b);// 使用方式二定义后在使用前如果没有赋值则编译期间会报错intc;System.out.println(c);c100;// int型变量所能表示的范围System.out.println(Integer.MIN_VALUE);System.out.println(Integer.MAX_VALUE);// 注意在定义int性变量时所赋值不能超过int的范围intd12345678999999;// 编译时报错初值超过了int的范围注意事项int不论在何种系统下都是4个字节推荐使用方式一定义如果没有合适的初始值可以设置为0在给变量设置初始值时值不能超过int的表示范围否则会导致溢出变量在使用之前必须要赋初值否则编译报错int的包装类型为 Integer3.3.2 长整型变量inta10;longb10;// long定义的长整型变量longc10L;// 为了区分int和long类型一般建议long类型变量的初始值之后加L或者llongd10l;// 一般更加以加大写L因为小写l与1不好区分// long型变量所能表示的范围这个数据范围远超过 int 的表示范围. 足够绝大部分的工程场景使用.System.out.println(Long.MIN_VALUE);System.out.println(Long.MAX_VALUE);注意事项长整型变量的初始值后加L或者l推荐加L长整型不论在那个系统下都占8个字节long的包装类型为Long3.3.3 短整型变量shorta10;System.out.println(a);// short型变量所能表示的范围System.out.println(Short.MIN_VALUE);System.out.println(Short.MAX_VALUE);注意事项short在任何系统下都占2个字节使用时注意不要超过范围(一般使用比较少)short的包装类型为Short3.3.4 字节型变量byteb10;System.out.println(b);// byte型变量所能表示的范围System.out.println(Byte.MIN_VALUE);System.out.println(Byte.MAX_VALUE);注意事项byte在任何系统下都占1个字节字节的包装类型为Byte3.4 浮点型变量3.4.1 双精度浮点型doubled3.14;System.out.println(d);注意事项double在任何系统下都占8个字节浮点数与整数在内存中的存储方式不同不能单纯使用2n的形式来计算double的包装类型为Doubledouble 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差因此浮点数是个近似值并不是精确值。3.4.2 单精度浮点型floatnum1.0f;// 写作 1.0F 也可以System.out.println(num);float 类型在 Java 中占四个字节, 同样遵守 IEEE 754 标准. 由于表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double, 不太推荐使用 float.float的包装类型为Float。3.5 字符型变量charc1A;//大写字母charc21;//数字字符System.out.println(c1);System.out.println(c2);// 注意java中的字符可以存放整形charc3国;System.out.println(c3);注意事项:Java 中使用 单引号 单个字母 的形式表示字符字面值.计算机中的字符本质上是一个整数.在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文.所以Unicode能表示的字符个数ASCII码能表示的字符个数char的包装类型为Character3.6 布尔型变量布尔类型常用来表示真假true or falsebooleanbtrue;System.out.println(b);bfalse;System.out.println(b);注意事项boolean 类型的变量只有两种取值, true 表示真, false 表示假.Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.Java虚拟机规范中并没有明确规定boolean占几个字节也没有专门用来处理boolean的字节码指令在Oracle公司的虚拟机实现中boolean占1个字节。booleanvaluetrue;System.out.println(value1);// 代码编译会出现如下错误boolean的包装类型为Boolean。上面我们了解了那么多的普通变量和包装变量那么有什么区别呢包装类暂时可以认为是普通类型的plus版本里面包含了很多方法。其中只有int——》Integer、char——》character其他普通类型——》包装类型 仅需首普通类型字母大写即可例如short——》Short、byte——》Byte3.7 类型转换Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验inta10;longb100L;ba;// 可以通过编译ab;// 编译失败在Java中当参与运算数据类型不一致时就会进行类型转换。Java中类型转换主要分为两类自动类型转换(隐式)和强制类型转换(显式)。3.7.1 自动类型转换(隐式)自动类型转换即代码不需要经过任何处理在代码编译时编译器会自动进行处理。特点数据范围小的转为数据范围大的时会自动进行。System.out.println(1024);// 整型默认情况下是intSystem.out.println(3.14);// 浮点型默认情况下是doubleinta100;longb10L;ba;// a和b都是整形a的范围小b的范围大当将a赋值给b时编译器会自动将a提升为long类型然后赋值ab;// 编译报错long的范围比int范围大会有数据丢失不安全floatf3.14F;doubled5.12;df;// 编译器会将f转换为double然后进行赋值fd;// double表示数据范围大直接将float交给double会有数据丢失不安全byteb1100;// 编译通过100没有超过byte的范围编译器隐式将100转换为bytebyteb2257;// 编译失败257超过了byte的数据范围有数据丢失3.7.2 强制类型转换(显式)强制类型转换当进行操作时代码需要经过一定的格式处理不能自动完成。特点数据范围大的到数据范围小的inta10;longb100L;ba;// int--long数据范围由小到大隐式转换a(int)b;// long--int, 数据范围由大到小需要强转否则编译失败floatf3.14F;doubled5.12;df;// float--double数据范围由小到大隐式转换f(float)d;// double--float, 数据范围由大到小需要强转否则编译失败ad;// 报错类型不兼容a(int)d;// int没有double表示的数据范围大需要强转小数点之后全部丢弃byteb1100;// 100默认为int没有超过byte范围隐式转换byteb2(byte)257;// 257默认为int超过byte范围需要显示转换否则报错booleanflagtrue;aflag;// 编译失败类型不兼容flaga;// 编译失败类型不兼容注意事项不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查强制类型转换不一定能成功不相干的类型不能互相转换3.8 类型提升不同类型的数据之间相互运算时数据类型小的会被提升到数据类型大的。3.8.1int与long之间int会被提升为longinta10;longb20;intcab;// 编译出错: a b》int long-- long long 赋值给int时会丢失数据longdab;// 编译成功a bint long---long long 赋值给long3.8.2byte与byte的运算bytea10;byteb20;bytecab;// 编译报错 错误: 不兼容的类型: 从int转换到byte可能会有损失(由于整型提升导致)System.out.println(c);//修改错误的方法byte c (byte) (a b);结论: byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是由于计算 a b 会先将 a和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误.由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short这种低于 4 个字节的类型, 会先提升成 int, 再参与计算的【类型提升小结:】不同类型的数据混合运算, 范围小的会提升成范围大的.对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.4. 字符串类型在Java中使用String类定义字符串类型比如publicstaticvoidmain(String[]args){Strings1hello;Strings2 world;System.out.println(s1);System.out.println(s2);System.out.println(s1s2);// s1s2表示将s1和s2进行拼接}在有些情况下需要将字符串和整形数字之间进行转换4.1 int 转成 Stringintnum10;// 方法1Stringstr1num;// 方法2Stringstr2String.valueOf(num);4.2 String 转成 intStringstr100;intnumInteger.parseInt(str);//使用integer里的方法
返回列表