JAVA之学习笔记(7)-------------数据类型

数据类型

 

一、数据类型


1.Java的八大基本数据类型为: 

整型 

byte字节型1字节 8bit  最大存储数据量是255,存放的数据范围是-128~127之间 

short短整型2字节 16bit最大数据存储量是65536,数据范围是-32768~32767之间 

int整型4字节 32bit最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1 

long长整型8字节 64bit最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1 

浮点型

float单精度4字节 32bit数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F 

double双精度8字节 64bit数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加 

字符类型

char字符型用单引号 

布尔类型

boolean布尔型true/false(只有真假两种结果)

数据值域的知识说明: 

1.一个bit是计算机考研存储的最小的数据单位。即1位,只可能是0或1. 

2.一个byte由八个bit组成,即八位,可以表示256个整数值,又由于byte在Java中有符号之分(即正负数),所以范围位-128~127. 

3.一个char在Java中由两个byte组成,用来表示一个字符,即unicode编码,是无符号类型。 

4.int和float在Java中由4个byte组成。 

5.每个long或double型变量占用八个byte的存储空间。 

6.1T=1024G,1G=1024M,1M=1024K,1K=1024B 

小心得:

1.程序中的整数默认都是int型,即在方法调用直接传入的一个具体的整数值,默认情况下是int型。

2.值域小的的类型可以自动转化为值域大的。值域大的不能直接转化为值域小的,但是可以通过强制转化实现

Java中所有的基本数据类型都有固定的存储范围和所占内存空间的大小,而不受具体操作系统的影响,来保证Java程序的可移植性。整形数据默认为int数据类型,浮点型默认为double数据类型,如果要表示long型数据或float型数据,要在相应的数值后面加上l、L或f、F,否则会出现编译问题

在其他语言中如C语言中,字符型数据和整型数据是可以相互转换的,都是以ASCII码来存储,可以将字符型数据当整型数据来看待。

二、基本数据类型间的转换

1、boolean类型不能转换成任何其他数据类型。

2、自动类型转换:容量小的数据类型可以自动转换成容量大的数据类型,如byte-short-int-long-float-double。byte、short、int不会互相转换,他们三者在计算时会转换成int类型。

例:int a=257;byte b=(byte)a;在java中,int类型占4个字节,byte占一个字节,故int类型转化为byte类型会出现位丢失情况,即将int的低4位作为byte类型的值。int型变量的值为257,对应的二进制是100000001,后8位是00000001,第一个0表示符号位,表示正数,所以变量b的值为1。

【备注:在计算机中,存储数据是通过内存地址来区分不同数据的,内存地址用十六进制数表示。在计算机存储单元中,一个ASCII码值占一个字节(8个二进制位),其中最高位符号位。事实上,计算机内的二进制数值是以补码形式表示的,正数的补码和原码的形式相同,负数的补码是将该数的绝对值的二进制形式,按位取反再加一。】

int a=128;byte b=(byte)a;这时b的值是-128。因为变量a对应的二进制是10000000,对应第一位符号位是1,则a是负数,其负数的补码仍是10000000,故b的值是-128。

3、强制类型转换:容量大的数据类型转换成容量小的数据类型时,要加上强制转换符,但这样有可能会造成精度降低或者数据溢出,要小心。

三、对象包装器

Java为了能将基本类型(primitive type)视为对象来处理,并能连接相关的方法,Java为每个节本类型都提供了相应的包装类,这样便能将基本类型转化为对象来处理。其对应关系表如下所示:

 

基本数据类型包装类
byte(字节)java.lang.Byte
char(字符)java.lang.Character
short(短整型)java.lang.Short
int(整型)java.lang.Integer
long(长整型)java.lang.Long
float(浮点型)java.lang.Float
double(双精度)java.lang.Double
boolean(布尔型)java.lang.Boolean


包装器类的使用

       专门用来包裹(Wrap)基本类型的类叫包装类,也叫包装器,如Long,Integer等,其主要目的就是提供一个对象实例作为壳,将其基本类型包到这个对象之中,然后提供很多操作数据的方法,使面向对象的编程变得更加容易。

字符串、包装类、原始数据类间的转换

四、装箱和拆箱

在Java SE 5.0之前,要进行操作后才能将int包装为一个Integer类。JDK 5.0为基本数据类型提供了自动装箱(boxing)和拆箱(unboxing)的功能。

boxing:将基本数据类型包装秤对应的包装类对象。

unboxing:将包装类对象转换成对应的基本数据类型。

Java编译器在编译时期会根据源代码的语法来决定是否进行装箱和拆箱。在运算时,也可以进行自动装箱和拆箱。

五、泛型
泛型只是编译时的概念,是供编译器进行语法检查用的(由于程序员需要一种类型安全的集合,故这种需求产生了泛型)。
使用泛型的目的主要有以下两个方面:
  1. 努力将运行时的异常转换成编译时错误,减少运行时异常数量(提高了编译器的能力)。
  2. 解决模版编程的问题。
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //不用泛型  
  2. List list0 = new ArrayList();  
  3. list0.add("hello");  
  4. String str0 = (String) list0.get(0);  
  5. //用泛型,这样在获取对象的时候就不用类型转换  
  6. List<String> list = new ArrayList<String>();  
  7. list.add("hello");  
  8. String str = list.get(0);  
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;">//不用泛型  
  2. List list0 = new ArrayList();  
  3. list0.add("hello");  
  4. String str0 = (String) list0.get(0);  
  5. //用泛型,这样在获取对象的时候就不用类型转换  
  6. List<String> list = new ArrayList<String>();  
  7. list.add("hello");  
  8. String str = list.get(0);</span>  

注意:泛型是没有数组的。编译器不承认 HashMap<K,V>[]这种形式的: Cannot create a generic array of HashMap<k,v> 
    原因就是数组必须确定他每一个元素的类型。但是泛型在编译阶段有一个类型擦除的问题,也就是说编译器理解HashMap<Integer,Integer>和HashMap<String,String>都是同一种类型HashMap。如果泛型数组存在,那么HashMap<Integer,Integer>和HashMap<String,String>对象都可以加入到同一个HashMap[]数组中,这会造成灾难性的结果。 

    如果一定要定义HashMap数组,可以使用HashMap[] aTweightList = new HashMap[10]; 形式,也就是HashMap常规类型。 
 
 
 
 
1如何将字串 String 转换成整数 int?
 
A. 有两个方法:
 
1). int i = Integer.parseInt([String]); 或 
i = Integer.parseInt([String],[int radix]);
 
2). int i = Integer.valueOf(my_str).intValue();
 
注: 字串转成 Double, Float, Long 的方法大同小异.
 

2 如何将整数 int 转换成字串 String ?
 

A. 有叁种方法:
 
1.) String s = String.valueOf(i);
 
2.) String s = Integer.toString(i);
 
3.) String s = "" + i;
 
注: Double, Float, Long 转成字串的方法大同小异.
 
 
 
JAVA数据类型转换     
关键字   类型转换 
 
 这是一个例子,说的是JAVA中数据数型的转换.供大家学习引
 
package cn.com.lwkj.erts.register;
import java.sql.Date;
public class TypeChange {
  public TypeChange() {
  }
  //change the string type to the int type
  public static  int stringToInt(String intstr)
  {
    Integer integer;
    integer = Integer.valueOf(intstr);
    return integer.intValue();
  }
  //change int type to the string type
  public static String intToString(int value)
  {
    Integer integer = new Integer(value);
    return integer.toString();
  }
  //change the string type to the float type
  public static  float stringToFloat(String floatstr)
  {
    Float floatee;
    floatee = Float.valueOf(floatstr);
    return floatee.floatValue();
  }
  //change the float type to the string type
  public static String floatToString(float value)
  {
    Float floatee = new Float(value);
    return floatee.toString();
  }
  //change the string type to the sqlDate type
  public static java.sql.Date stringToDate(String dateStr)
  {
    return  java.sql.Date.valueOf(dateStr);
  }
  //change the sqlDate type to the string type
  public static String dateToString(java.sql.Date datee)
  {
    return datee.toString();
  }
 
  public static void main(String[] args)
  {
    java.sql.Date day ;
    day = TypeChange.stringToDate("2003-11-3");
    String strday = TypeChange.dateToString(day);
    System.out.println(strday);
  }
 

}
 

JAVA中常用数据类型转换函数 
虽然都能在JAVA API中找到,整理一下做个备份。
 
string->byte
Byte static byte parseByte(String s) 
 
byte->string 
Byte static String toString(byte b)
 
char->string 
Character static String to String (char c)
 
string->Short 
Short static Short parseShort(String s)
 
Short->String 
Short static String toString(Short s)
 
String->Integer 
Integer static int parseInt(String s)
 
Integer->String 
Integer static String tostring(int i)
 
String->Long 
Long static long parseLong(String s)
 
Long->String 
Long static String toString(Long i)
 
String->Float 
Float static float parseFloat(String s)
 
Float->String 
Float static String toString(float f)
 
String->Double 
Double static double parseDouble(String s)
 
Double->String
Double static String toString(Double)

++++++++++++++++++++++++++++++++++++++++++++++++++++++

数据类型

基本类型有以下四种:
int长度数据类型有:byte(8bits)、short(16bits)、int(32bits)、long(64bits)、
float长度数据类型有:单精度(32bits float)、双精度(64bits double)
boolean类型变量的取值有:ture、false
char数据类型有:unicode字符,16位
对应的类类型:Integer、Float、Boolean、Character、Double、Short、Byte、Long

转换原则

从低精度向高精度转换
byte 、short、int、long、float、double、char
注:两个char型运算时,自动转换为int型;当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换

基本类型向类类型转换

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

类类型向字符串转换

正向转换:因为每个类都是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数值。

基本类型向字符串的转换
正向转换:
如:int a=12;
String b;b=a+””;

反向转换:
通过类包装器
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数值。


良心的公众号,更多精品文章,不要忘记关注哈

《Android和Java技术栈》


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值