动手动脑(一)数据类型学习

1,基本数据类型

  

   由于计算机本身是二进制的,而浮点数实际上只是近似值,所以二进制数转为十进制浮点数时,精度容易丢失,解决办法:用BigDecimal转化类型。

2,基本数据类型之间转换规则,

  1),自动数据类型转换:容量小的数据类型可以自动转换为容量大的数据类型,转换数据直接赋值即可

  

 

 

     实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。

    特例:整数常量为int类型,只要整数长度不超过对应类型的表示范围即可以自动转为byte,short,char类型。

  2),强制数据类型转换:用于显式的转换一个数值的类型。在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。

(type)变量

  注意:

    浮点数强转为int类型,直接丢失小数部分

    数据长度超过强转后的类型表数范围,会转换为完全不同的值

int num=300;
byte num2=(byte)num;
System.out.println(num2);
运行结果:
44

    不能在布尔类型和任何数值类型之间做强制类型转换

  3),大数操作溢出问题:

int money = 1000000000; //10亿
int years = 20;
int total = money*years;
//返回的total是负数,超过了int的范围
System.out.println("错误转换total="+total);
long total1 = money*years;
//返回的total仍然是负数。默认是int,因此结果会转成int值,再转成long 但是已经发生了数据丢失
System.out.println("错误转换total1="+total1);
//返回的total2正确:先将一个因子变成long,整个表达式发生提升。全部用long来计算。
long total2 = money*((long)years);
System.out.println("正确转换total2="+total2);
long total3=1L*money*years;
System.out.println("正确转换total3="+total3);
运行结果:
错误转换total=-1474836480
错误转换total1=-1474836480
正确转换total2=20000000000
正确转换total3=20000000000

3,常见数据类型转换具体操作:

  1)字符串转化为整型;

int i = Integer.parseInt(String str);     //静态parseXXX方法

int i = Integer.valueOf(String str).intValue();  //先转换成相应的封装器实例,再调用对应的方法转换成其它类型

    Integer.parseInt和 Integer.valueOf 不同,前者生成的是整型,而后者是一个对象,所以要通过intValue()来获得对象的值;

    字符串转成 Double, Float, Long 的方法大同小异.

  2) 整型转化为字符串:

String str = String.valueOf(int i);

String str = Integer.toString(int i);

String str = “” + i ;

     Double, Float, Long 转字符串的方法大同小异.

  3) double型转换为int型:

double d1=100.00;

Double D1=new Double(d1);

int i1=D1.intValue();

 

4,枚举类型:enum Size{SMALL,MEDIUM,LARGE}

  枚举类型可以将整形数值转换为对象,可以扩大switch语句的使用范围,枚举类型是引用类型,不属于原始数据类型,可以用“==”和equals()方法直接比对枚举变量的值。

  isPrimitive():指定的Class对象表示一个基本类型则返回true

  枚举类型的valueOf():调用者为枚举类;

            形参只要一个String类型的值即可,并且该String值为枚举值对应的名称;

            返回值是一个枚举值

            作用是返回【名称为String name的】【枚举类T中的】枚举值

package com.liqin.jiecheng.java;public class Enum_test {

public static void main(String[] args) {
Size s=Size.SMALL;
Size t=Size.LARGE;
//可以用“==”和equals()方法直接比对枚举变量的值。
System.out.println(s.equals(t)); //false
//isPrimitive():指定的Class对象表示一个基本类型则返回true
System.out.println(s.getClass().isPrimitive()); //false
/*valueOf():调用者为枚举类;
形参只要一个String类型的值即可,并且该String值为枚举值对应的名称;
返回值是一个枚举值
作用是返回【名称为String name的】【枚举类T中的】枚举值
*/
Size u=Size.valueOf("SMALL");
System.out.println(s==u); //true
//输出枚举类中的内容
for(Size value:Size.values()){
System.out.println(value);
}
}
//SMALL, MEDUIM, LARGE为常量
enum Size{SMALL,MEDIUM,LARGE};

}

运行结果:

false
false
true
SMALL
MEDIUM
LARGE

5,当局部变量与全局变量重名时,局部变量会屏蔽全局变量。

 

posted on 2018-10-07 17:54  不愧下学  阅读(124)  评论(0编辑  收藏  举报

导航