Java基本数据类型-四类⼋种
⼀、Java四⼤数据类型分类
1.整型
byte 、short 、int 、long
2.浮点型
float 、 double
3.字符型
char
4.布尔型
boolean
Java语⾔是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定。
由于是statical typed,导致Java语⾔也是强类型(Strong typed)的。强类型意味着每个变量都具有⼀种类型,每个表达式具有⼀种类型,并且每种类型都是严格定义的,类型限制了变量可以hold哪些值,表达式最终产⽣什么值。同时限制了这些值可以进⾏的操作类型以及操作的具体⽅式。
所有的赋值操作,⽆论是显式的还是在⽅法调⽤中通过参数传递,都要进⾏类型兼容性检查。
⼆、数据类型之间的转换
1、简单类型数据间的转换,有两种⽅式:⾃动转换和强制转换,通常发⽣在表达式中或⽅法的参数传递时。
⾃动转换
当⼀个较"⼩"数据与⼀个较"⼤"的数据⼀起运算时,系统将⾃动将"⼩"数据转换成"⼤"数据,再进⾏运算。
⽽在⽅法调⽤时,实际参数较"⼩",⽽被调⽤的⽅法的形式参数数据⼜较"⼤"时(若有匹配的,当然会直接调⽤匹配的⽅法),系统也将⾃动将"⼩"数据转换成"⼤"数据,再进⾏⽅法的调⽤,⾃然,对于多个同名的重载⽅法,会转换成最"接近"的"⼤"数据并进⾏调⽤。
这些类型由"⼩"到"⼤"分别为 (byte,short,char)–int–long–float—double。
这⾥我们所说的"⼤"与"⼩",并不是指占⽤字节的多少,⽽是指表⽰值的范围的⼤⼩。
①下⾯的语句可以在Java中直接通过:
②如果低级类型为char型,向⾼级类型(整型)转换时,会转换为对应ASCII码值,例如
③对于byte,short,char三种类型⽽⾔,他们是平级的,因此不能相互⾃动转换,可以使⽤下述的强制类型转换。
强制转换
将"⼤"数据转换为"⼩"数据时,你可以使⽤强制类型转换。即你必须采⽤下⾯这种语句格式: int n=(int)3.14159/2;可以想象,这种转换肯定可能会导致溢出或精度的下降。
2、表达式的数据类型⾃动提升, 关于类型的⾃动提升,注意下⾯的规则。
①所有的byte,short,char型的值将被提升为int型;
②如果有⼀个操作数是long型,计算结果是long型;
③如果有⼀个操作数是float型,计算结果是float型;
④如果有⼀个操作数是double型,计算结果是double型;
3、包装类过渡类型转换
⼀般情况下,我们⾸先声明⼀个变量,然后⽣成⼀个对应的包装类,就可以利⽤包装类的各种⽅法进
⾏类型转换了。例如:
①当希望把float型转换为double型时:
②当希望把double型转换为int型时:
简单类型的变量转换为相应的包装类,可以利⽤包装类的构造函数。即:Boolean(boolean value)、Character(char value)、Integer(int value)、Long(long value)、Float(float value)、Double(double value)
⽽在各个包装类中,总有形为××Value()的⽅法,来得到其对应的简单类型数据。利⽤这种⽅法,也可以实现不同数值型变量间的转换,例如,对于⼀个双精度实型类,intValue()可以得到其对应的整型变量,⽽doubleValue()可以得到其对应的双精度实型变量。
4、字符串与其它类型间的转换
其它类型向字符串的转换
①调⽤类的串转换⽅法:X.toString();
②⾃动转换:X+"";
③使⽤String的⽅法:String.volueOf(X);byte b;int i=b; long l=b; float f=b; double d=b;
1char c='c'; int i=c;System.out.println("output:"+i);输出:output:99;
12short i=99 ; char c=(char)i; System.out.println("output:"+c);输出:output:c;1byte b; b=3; b=(byte)(b*3);//必须声明byte 。
1float f1=100.00f;Float F1=new Float(f1);double d1=F1.doubleValue();//F1.doubleValue()为Float 类的返回double 值型的⽅法1
2
3double d1=100.00;Double D1=new Double(d1);int i1=D1.intValue();
1
2
3
字符串作为值,向其它类型的转换
①先转换成相应的封装器实例,再调⽤对应的⽅法转换成其它类型
例如,字符中"32.1"转换double型的值的格式为:new Float(“32.1”).doubleValue()。也可以
⽤:Double.valueOf(“32.1”).doubleValue()
②静态parseXXX⽅法
③Character的getNumericValue(char ch)⽅法
5、Date 类与其它数据类型的相互转换
整型和Date类之间并不存在直接的对应关系,只是你可以使⽤int型为分别表⽰年、⽉、⽇、时、分、秒,这样就在两者之间建⽴了⼀个对应关系,在作这种转换时,你可以使⽤Date类构造函数的三种形式:
①Date(int year, int month, int date):以int型表⽰年、⽉、⽇
②Date(int year, int month, int date, int hrs, int min):以int型表⽰年、⽉、⽇、时、分
③Date(int year, int month, int date, int hrs, int min, int sec):以int型表⽰年、⽉、⽇、时、分、秒
在长整型和Date类之间有⼀个很有趣的对应关系,就是将⼀个时间表⽰为距离格林尼治标准时间1970年1⽉1⽇0时0分0秒的毫秒数。对于这种对应关系,Date类也有其相应的构造函数:Date(long date)。
获取Date类中的年、⽉、⽇、时、分、秒以及星期你可以使⽤Date类的getYear()、getMonth()、getDate()、getHours()、
getMinutes()、getSeconds()、getDay()⽅法,你也可以将其理解为将Date类转换成int。
⽽Date类的getTime()⽅法可以得到我们前⾯所说的⼀个时间对应的长整型数,与包装类⼀样,Date类也有⼀个toString()⽅法可以将其转换为String类。
有时我们希望得到Date的特定格式,例如20210917,我们可以使⽤以下⽅法,⾸先在⽂件开始引⼊,String s = "1";byte b = Byte.parseByte( s );short t = Short.parseShort( s );int i = Integer.parseInt( s );long l = Long.parseLong( s );Float f = Float.parseFloat( s );Double d = Double.parseDouble( s );
1
2
3
4
5
c++string类型6
SimpleDateFormat;import java.util.*;java.util.Date date = new java.util.Date(); //如果希望得到YYYYMMDD 的格式SimpleDateFormat sy1=new SimpleDateFormat("yyyyMMDD");String dateFormat=sy1.format(date); //如果希望分开得到年,⽉,⽇SimpleDateFormat sy=new SimpleDateFormat("yyyy");SimpleDateFormat sm=new SimpleDateFormat("MM");SimpleDateFormat sd=new SimpleDateFormat("dd");String syear=sy.format(date);String smon=sm.format(date);String sday=sd.format(date);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
总结:只有boolean不参与数据类型的转换
(1)⾃动类型的转换:a.常数在表数范围内是能够⾃动类型转换的
b.数据范围⼩的能够⾃动数据类型⼤的转换(注意特例)
int到float,long到float,long到double 是不会⾃动转换的,不然将会丢失精度
c.引⽤类型能够⾃动转换为⽗类的
d.基本类型和它们包装类型是能够互相转换的
(2)强制类型转换:⽤圆括号括起来⽬标类型,置于变量前
三、Java 引⽤类型
Java有 5种引⽤类型(对象类型):类 接⼝ 数组 枚举 标注
引⽤类型:底层结构和基本类型差别较⼤
JVM的内存空间:
(1)Heap 堆空间:分配对象 new Student()
(2)Stack 栈空间:临时变量 Student stu
(3)Code 代码区 :类的定义,静态资源 Student.class
上例实现步骤:a.JVM加载Student.class 到Code区
四、总结
1、如果⼩数类型,并且⼩数⽐较⼩,⽐如四位⼩数,建议使⽤ BigDecimal 如果 是 double 类型会有失精度,有的时候会⽤科学记数法表⽰;
⽐如 0.0001 会变成 1.0E-4,试问谁能看懂,如果偏要⽤ double 还要对类型进⾏转换。
2、int double 都是有包装类型的,建议使⽤包装类型,包装类型能区分 null 和 0,就像在spring-mvc接收时使⽤ int 类型接收值,如果这个属性不传值,ajax 请求会报 400 错误,⽽且不能区分这个值是否是空;
3、for 循环中如果要对字符串进⾏拼接,建议使⽤ StringBuffer ,如果没有线程安全问题,直接使⽤ StringBuilder,原因StringBuffer 的所有操作是保证线程安全的,可以理解成使⽤了 synchronized 关键字,对性能是有影响的。
4、最后对所有包装类型进⾏操作(⽐如 toString())要进⾏空指针判断,我们并不能保证这个值是有的。eg :Student stu = new Student (); //new 在内存的堆空间创建对象stu.study(); //把对象的地址赋给stu 引⽤变量
1
2 b.new Student()在堆空间分配空间并创建⼀个Student 实例; c.将此实例的地址赋值给引⽤stu ,
栈空间;
1
2
3
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论