找回密码
 会员注册
查看: 34|回复: 0

Java数据类型(八种基本数据类型+四种引用类型)、数据类型转换

[复制链接]

2

主题

0

回帖

7

积分

新手上路

积分
7
发表于 2024-9-3 19:32:53 | 显示全部楼层 |阅读模式
1.总览Java的数据类型只有两大类:8大基本数据类型与引用数据类型。其中基本数据类型又被称为值类型基本数据类型:6种数字类型(byte/short/int/long/float/double)、1种字符型(char)、1种布尔型(boolean)引用数据类型:类(Class)、接口(Interface)、数组(Array)除了以上的基本数据类型和引用数据类型,还有一些其他相关的数据类型,例如字符串类型String、枚举类型Enum,它们都是基于引用数据类型来实现的基本数据类型只能存自己类型的值,无其他额外功能,具体介绍如下第2小节引用类型:参数传递时,以拷贝引用地址的方式传递给接收变量,而非复制整个数据本体。除八大基本数据类型之外的所有数据类型,都为引用数据类型。所有引用数据类型的默认值都为null。为了基本数据类型可以与引用数据类型互相转换、以利用彼此的特性,java为每一种基本数据类型提供了相应的包装类。包装类对基本数据类型进行了封装,提供了丰富的功能,包装类是基本类型的拓展包装类是引用类型的一种,包装类与基本数据类型一一对应,也有8种,分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean2.基本数据类型2.1类型概述6种数字类型4种整数型:byte、short、int、long2种浮点型:float、double1种字符类型:char1种布尔型:boolean2.2基本数据类型详解基本类型存储大小初始化默认值取值范围包装类型byte1字节(8位)0-128~127Byteshort2字节(16位)0-32768~32767Shortint4字节(32位)0-2^31~2^31-1Integerlong8字节(64位)0L。"L"理论上不分大小写,但若写成"l"容易与数字"1"混淆,不容易分辨,所以最好大写。-2^63~2^63-1Longfloat4字节(32位)0.0f符合IEEE754标准的浮点数,1.4E-45~3.4028235E38Floatdouble8字节(64位)0.0d符合IEEE754标准的浮点数,4.9E-324~1.7976931348623157E308Doublechar2字节(16位)‘\u0000’\u0000~\uffff(十进制等效值为0~65535,本质也是数值)Characterboolean1字节(8位)/4字节(32位)falsetrue/falseBooleanchar数据类型可以储存任何字符。float、double不能用来表示精确的值,运算不精确——>解决方案:BigDecimal。创建BigDecimal对象的方式:BigDecimal(doubleval):double类型的数据作为参数,交给BigDecimal对象【不用,因为double本身不精确】BigDecimal(Stringval):String类型的数据作为参数,交给BigDecimal对象【用这个】注:double->String直接拼接一个字符串""就行。对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中//longSystem.out.println("基本类型:long二进制位数:"+Long.SIZE);System.out.println("包装类:java.lang.Long");System.out.println("最小值:Long.MIN_VALUE="+Long.MIN_VALUE);System.out.println("最大值:Long.MAX_VALUE="+Long.MAX_VALUE);System.out.println();//doubleSystem.out.println("基本类型:double二进制位数:"+Double.SIZE);System.out.println("包装类:java.lang.Double");System.out.println("最小值:Double.MIN_VALUE="+Double.MIN_VALUE);System.out.println("最大值:Double.MAX_VALUE="+Double.MAX_VALUE);System.out.println();//其他类型方法同上类似1234567891011121314152.3基本数据类型与引用数据类型区别存储方式:基本数据类型直接存储值,而引用数据类型存储的是对象的引用(内存地址)内存分配:基本数据类型在栈上分配内存,引用数据类型在堆上分配内存(具体内容存放在堆中,栈中存放的是其具体内容所在内存的地址)。栈上的分配速度较快,但是内存空间较小,而堆上的分配速度较慢,但可以分配更大的内存空间默认值:基本数据类型会有默认值,例如int类型的默认值是0,boolean类型的默认值是false。而引用数据类型的默认值是null,表示没有引用指向任何对象复制操作:基本数据类型进行复制时,会复制该变量的值。而引用数据类型进行复制时,只会复制对象的引用,两个变量指向同一个对象参数传递:基本数据类型作为方法的参数传递时,传递的是值的副本,不会修改原始值。而引用数据类型作为方法的参数传递时,传递的是对象的引用,可以修改对象的属性或状态比较操作:基本数据类型使用==进行比较时,比较的是值是否相等。而引用数据类型使用==进行比较时,比较的是引用是否指向同一个对象,如果要比较对象的内容是否相同,需要使用equals()方法注意:Java中的包装类(WrapperClasses)对基本数据类型进行了封装,使其也具有了对象的特性,可以调用方法和进行类型转换等操作。2.4基本数据类型与包装类区别存储方式:基本类型直接存储值,而包装类型存储的是对应基本类型值的对象。空值处理:基本类型没有空值(null)的概念,而包装类型可以将null作为有效值来表示缺失或无效值。默认值:基本类型有默认值,例如int类型的默认值是0,boolean类型的默认值是false。而包装类型的默认值是null。对象操作:基本类型不能直接调用方法,而包装类型可以调用对应的方法,例如Integer类的intValue()方法可以获取保存在Integer对象中的值。自动装箱/拆箱:基本类型和包装类型之间可以进行自动装箱和拆箱的转换。自动装箱是指将基本类型的值自动转换为对应的包装类型对象,如int转Integer,Integerinteger=100,底层调用了Interger.valueOf(100)方法;而自动拆箱则是将包装类型对象自动转换为基本类型的值。泛型支持:泛型只能使用引用类型,不能直接使用基本类型。因此,当需要在泛型中使用基本类型时,需要使用对应的包装类型。比较方式:基本类型使用==进行比较时,比较的是值是否相等。而包装类型使用==进行比较时,比较的是引用是否指向同一个对象,而不是比较值是否相等。若要比较包装类型的值是否相等,需要使用equals()方法。注意:在Java5及其之后的版本中,基本类型和包装类型之间的转换会通过自动装箱、拆箱来自动进行,使得基本类型和包装类型之间的使用更加方便补充:包装类Integer的创建方式1)Integeri1=newInteger(3);没有高效的效果,new一次,创建一个包装类对象2)Integeri2=Integer.valueOf(3);有高效的效果,数据在-128~127的范围内,才有高效的效果3)Integeri3=3;自动装箱:编译器会把int类型5装箱,变成Integer,底层调用Integer.valueOf(5)方法包装类Double的创建方式1)Doubled1=newDouble(2.7);没有高效的效果,new一次,创建一个包装类对象2)Doubled2=Double.valueOf(2.7);这个也没有高效的效果,只有Integer有自动装箱与自动拆箱IntegeraInteger=100;自动装箱【编译器会将int类型的100装箱,变成Interger类型,底层调用Interger.valueOf(100)方法】inta=aInteger;自动拆箱【编译器会将包装类型aInteger中的数据取出来,赋值给a,底层调用aInteger.intValue()方法】String转Integer、int、Double、doubleStringstr1="7";Integerm=Integer.valueOf(str1);intn=Integer.parseInt(str1);Stringstr2="5.4";Doubled2=Double.valueOf(str2);doubled3=Double.parseDouble(str2);//输出7,7,5.4,5.4System.out.println(m+","+n+","+d2+","+d3);123456789103.数据类型转换Java中的数据转换主要分为两种:自动类型转换(也称为隐式转换)、强制类型转换(也称为显式转换)。转换从低级到高级:byte、short、char(三者同级)——>int——>long——>float——>double自动类型转换:代码无需任何处理,在代码编译时编译器会自动进行处理。特点——低级转换高级。强制类型转换:需要在待转换数据类型前使用(type)value,type是要强制类型转换后的数据类型,可能会导致溢出或损失精度。特点——高级转换低级。数据类型转换必须满足如下规则:不能对boolean类型进行类型转换。不能把对象类型转换成不相关类的对象。在把容量大的类型转换为容量小的类型时必须使用强制类型转换。转换过程中可能导致溢出或损失精度,例如:inti=128;byteb=(byte)i;12因为byte类型是8位,最大值为127,所以当int强制转换为byte类型时,值128时候就会导致溢出。浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:(int)23.7==23;(int)-45.89f==-45;123.1具体示例int和long互转、int和double互转、int和byte互转、int和char互转、int和String互转publicstaticvoidmain(String[]args){intaInt=20;longbLong=50L;doublecDouble=4.8;//低优先级类型数据+高优先级类型数据——>结果会自动转换为高优先级数据longsum=aInt+bLong;//long->int需要强制类型转换intd=(int)bLong;//double->int需要强制类型转换inte=(int)cDouble;System.out.println("自动类型转换int—>long:"+sum);System.out.println("强制类型转换long—>int:"+d);System.out.println("强制类型转换double—>int:"+e);System.out.println();//int和byte转换bytefByte=(byte)aInt;//高转低,强转intgInt=fByte;//低转高,自动System.out.println("高转低-强转,int->byte:"+fByte);System.out.println("低转高-自动,byte->int:"+gInt);System.out.println();//int和char转换charhChar='a';intiInt=hChar;charj=(char)iInt;System.out.println("低转高-自动,char->int:"+iInt);System.out.println("高转低-强转,int->char:"+j);System.out.println();//int和String转换//int转String:1)使用String的ValueOf方法2)直接使用String类+(即字符串拼接),任意字符串和其他类型"+"都会把其他类型转为字符串Stringstr1=String.valueOf(aInt);Stringstr2=""+aInt;System.out.println("int转String:"+str1+","+str2);//String转int:调用包装类的Integer.parseInt方法,当字符串中包含非数字时会出错Stringstr3="18";intk=Integer.parseInt(str3);System.out.println("String转int:"+k);System.out.println();//byte和char互转bytem=(byte)hChar;charn=(char)m;System.out.println("char->byte,强转:"+m);System.out.println("byte->char,强转:"+n);}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051输出:自动类型转换int—>long:70强制类型转换long—>int:50强制类型转换double—>int:4高转低-强转,int->byte:20低转高-自动,byte->int:20低转高-自动,char->int:97高转低-强转,int->char:aint转String:20,20String转int:18char->byte,强转:97byte->char,强转:a123456789101112131415
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-13 10:38 , Processed in 2.808076 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表