java学习——各种数据类型总结

      本节让我们来进行java数据类型的总结。首先java数据类型分为两大类:基本数据类型与引用类型。具体如下图:


一、基本数据类型

       基本数据类型,或者叫做内置类型,是JAVA中不同于类的特殊类型,它们是我们编程中使用最频繁的类型。java中的基本数据类型分别是:boolean,byte,char,short,int,long,float,double,具体如下:

  1. boolean(布尔类型):数据值只有true或false两种结果,适用于逻辑运算,不能进行数据类型的转换
  2. byte型(字节型):数据在内存中占用1个字节,表示的存储数据范围为:-128~127。
  3. char型(字符型):数据在内存中占用2个字节。char型数据用来表示通常意义上的字符,用单引号赋值。
  4. short型(短整型):数据在内存中占用2个字节数据范围是-32768~32767之间
  5. int型(整型):数据在内存中占用4个字节,数据范围是负的2的31次方到正的2的31次方减1
  6. long型(长整型):数据在内存中占用8个字节,数据范围为负的2的63次方到正的2的63次方减1
  7. float型(单精度浮点型):数据在内存中占用4个字节数据范围在3.4e-45到1.4e38,直接赋值时必须在数字后加上f或F。
  8. double型(双精度浮点型):数据在内存中占用8个字节,数据范围在4.9e-324到1.8e308,赋值时可以加d或D也可以不加。

      另外这8种基本类型也对应了8种封装类型,它们分别是:Boolea,Byte,Character,Short,Integer ,Long ,Float,Double 。JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了。如:基本类型byte 二进制位数:Byte.SIZE,最小值:Byte.MIN_VALUE,最大值:Byte.MAX_VALUE。


二、引用数据类型

      在java里面第二大数据类型是引用数据类型,引用数据类型可以分为:类、接口类型、数组类型、枚举类型、注解类型;基本数据类型只占用一块内存,但是引用数据类型占用2块内存,分别是栈内存和堆内存

1、基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上;

2、引用数据类型在被创架时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。

例如:我有一个类MyDate,其中有属性day,mouth,year等,有构造方法(带参数);

现在为其创建一个对象MyDate d1 = new MyDate(8,8,2008);在内存中的具体创建过程是:


1)首先在栈内存中位其d1分配一块空间;

2)然后在堆内存中为MyDate对象分配一块空间,并为其三个属性设初值0,0,0;

3)根据类MyDate中对属性的定义,为该对象的三个属性进行赋值操作;

4)调用构造方法,为三个属性赋值为8,8,2008;(注意这个时候d1与MyDate对象之间还没有建立联系)

5)将MyDate对象在堆内存中的地址,赋值给栈中的d1;通过句柄d1可以找到堆中对象的具体信息。



三、数据类型的转换

在java中数据类型的转换分为以下几种情况: 
  • 低级到高级的自动类型转换;
  • 高级到低级的强制类型转换(会导致溢出或丢失精度);
  • 基本类型向类类型转换; 
  • 基本类型向字符串的转换; 
  • 类类型向字符串转换

1、基本数据类型之间的转换规则
      在一个双操作数以及位运算等算术运算式中,会根据操作数的类型将低级的数据类型自动转换为高级的数据类型。主要分为以下几种情况:
(1)、只要两个操作数中有一个是double类型的,另一个会被转换成double类型,并且结果也是double类型; 
          只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型; 
          只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型; 
          两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。   
(2)、如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值,再做自动转换。 
(3)、对于byte,short,char三种类型而言,他们是平级的,因此不能相互自动转换,可以使用下述的强制类型转换。
          如: short i=99  
                 char c=(char)i; 
                 System.out.println("output:"+c);  
(4)、不能在布尔值和任何数字类型间强制类型转换; 
(5)、不同级别数据类型间的强制转换,可能会导致溢出或精度的下降。  
(6)、当字节类型变量参与运算,java作自动数据运算类型的提升,将其转换为int类型。
例如:
             byte b;
             b=3; 
             b=(byte)(b*3);//必须声明byte。

2、包装数据类型与基本数据类型之间的转换

      简单类型的变量转换为相应的包装类,可以利用包装类的构造函数。即:Boolean(boolean value)、Character(char value)、Integer(int value)、Long(long value)、Float(float value)、Double(double value) 
而在各个包装类中,总有形为××Value()的方法,来得到其对应的简单类型数据,利用这种方法,也可以实现不同数值型变量间的转换。例如,对于一个双精度实型类,intValue()可以得到其对应的整型变量,而doubleValue()可以得到其对应的双精度实型变量。

3、字符串与其它类型间的转换

(1)、其它类型向字符串的转换 
  • 调用类的串转换方法:X.toString();
  • 自动转换:X+“”; 
  • 使用String的方法:String.volueOf(X);

(2)、字符串作为值,向其它类型的转换 
  • 先转换成相应的封装器实例,再调用对应的方法转换成其它类型。例如:字符中“32.1”转换double型的值的格式为:new Float(“32.1”).doubleValue(),也可以用:Double.valueOf(“32.1”).doubleValue()。
  • 静态parseXXX方法,例如:
          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 );
  • Character的getNumericValue(char ch)方法具体可查阅api。

4、转换实例

(1)、基本类型向类类型转换 
          正向转换:通过类包装器来new出一个新的类类型的变量 Integer a= new Integer(2);
          反向转换:通过类包装器来转换 int b=a.intValue();

通过类包装器——>基本数据类型
eg1:int i=Integer.parseInt(“123”) 
说明:此方法只能适用于字符串转化成整型变量。
eg2: float f=Float.valueOf(“123”).floatValue() 
说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。 
eg3: boolean b=Boolean.valueOf(“123”).booleanValue() 
说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
eg4:double d=Double.valueOf(“123”).doubleValue() 
说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doubleValue()方法返回其对应的double数值。 
eg5: long l=Long.valueOf(“123”).longValue() 
说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。 
eg6: char=Character.valueOf(“123”).charValue() 
说明:上例是将一个字符串转化成一个Character对象,然后再调用这个对象的charValue()方法返回其对应的char数值。

(2)、基本类型向字符串的转换 正向转换: 如下: 
System.out.println(""+2+3);// “""”把2转成字符串操作;
System.out.println(2+3);   // 不存在转换。 
System.out.println(2+3+"");// 前两个数值相加后,被“""”转成字符串。
System.out.println(2+""+3);// 同第一个。 输出显示为:23,5,5,23 3)类类型向字符串转换 

正向转换:因为每个类都是object类的子类,而所有的object类都有一个toString()函数,所以通过toString()函数来转换即可 
反向转换:通过类包装器new出一个新的类类型的变量
eg1: int i=Integer.valueOf(“123”).intValue() 
说明:上例是将一个字符串转化成一个Integer对象,然后再调用这个对象的intValue()方法返回其对应的int数值。 
eg2: float f=Float.valueOf(“123”).floatValue() 
说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。 
eg3: boolean b=Boolean.valueOf(“123”).booleanValue() 
说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
eg4:double d=Double.valueOf(“123”).doubleValue() 
说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doubleValue()方法返回其对应的double数值。 
eg5: long l=Long.valueOf(“123”).longValue() 
说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。 
eg6: char=Character.valueOf(“123”).charValue() 
说明:上例是将一个字符串转化成一个Character对象,然后再调用这个对象的charValue()方法返回其对应的char数值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值