(2.1.17)java之强制类型转换、数组的实例化和Math类中的round、ceil、floor

0-转换原则

  • 基本类型有以下四种:

    1. int长度数据类型有:byte(8bits)、short(16bits)、int(32bits)、long(64bits)、
    2. float长度数据类型有:单精度(32bits float)、双精度(64bits double)
    3. boolean类型变量的取值有:ture、false
    4. char数据类型有:unicode字符,16位
      对应的类类型:Integer、Float、Boolean、Character、Double、Short、Byte、Long
  • 转换原则

    1. 从低精度向高精度转换
      byte 、short、int、long、float、double、char
      注:两个char型运算时,自动转换为int型;当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换
    2. 基本类型向类类型转换
      • 正向转换:通过类包装器来new出一个新的类类型的变量
        Integer a= new Integer(2);
      • 反向转换:通过类包装器来转换
        int b=a.intValue();
    3. 类类型向字符串转换
      正向转换:因为每个类都是object类的子类,而所有的object类都有一个toString()函数,所以通过toString()函数来转换即可
      反向转换:通过类包装器new出一个新的类类型的变量
      eg1: int i=Integer.valueOf(“123”).intValue()

1-int类型不能显示强转为boolean

int i=1;
if(i)
  cout<<"true";
else
  cout<<"false";

报运行时错误。int类型不能显示强转为boolean
1)boolean a=true;//这个a在JVM中占4个字节即:32位。
2)boolean[] b = new boolean[10];//数组时,每一个boolean在JVM中占一个字节。

  int x=3;
        int y=1;
        if(x=y)
            system.out.println(“Not equal”);
        else
            system.out.println(“Equal”);
     }

以上语句C中正常、java编译报错
我来解析下:
其实这个是由于java和C语言的不同处理机制导致的:

C语言中
当if语句中的条件为赋值语句时,实际上是将赋值后的结果与0进行比较【左值】
if1)  由于1>0  所以认为是true

java语言中,虽然也用了左值,但是不再与0比较,而是直接将1放入if()中
但是int类型,不能转换为boolean,所以会报错:“Type mismatch: cannot convert from int to boolean”

2-高向低转换,必须强转,且会丢失精度

short a=128;
byte b=(byte)a;

a为2个字节:00000000 100000000

b为1个字节,支持【-128,127】:取底位一个字节100000000 ————>128溢出为-128

3-涉及byte,char,short的运算均强转为int格式

short s1=1;
s1=s1+1;//报错,s1+1返回为int型,不能直接赋值给short变量
short s1=1;
s1=(short)s1+1;//正确
但+=运算符不会产生类型转换,如:
short s=1;s+=1;正确

4-Math类中的round、ceil、floor

floor 返回不大于的最大整数,向下取整
round则是4舍5入的计算,入的时候是到大于它的整数,也就是+0.5后floor
ceil 则是不小于他的最小整数,向上取整。正入,负舍。

Math.floor  Math.round  Math.ceil

1.4 1 1 2
1.5 1 2 2
1.6 1 2 2
-1.4 -2 -1 -1
-1.5 -2 -1 -1
-1.6 -2 -2 -1

5-汉子2个字节,英文1个字节,resourceBundle处理国际化

hello 5个字节
你好 4个字节

6-数组的初始化

声明过程中不加numsize: int a[5] 错误
这点与C不一样,c语言不允许声明空数组

  1. 一维数组的声明:int a[]——–int [] a

    • int [] a=new int(5);——- int a[]=new int(5);
    • int [] a={1,2,3,4,5};——– int a[]={1,2,3,4,5};
    • int [] a; a=new int(5);
    • int [] a; a=new int[]{1,2,3,4,5};
  2. 二维数组的声明:int a[][]——int [][] a——int[] a []

    • int [][] a={{1,2},{3,4,5}}//第二维长度可以不一样
    • int [][]a=new int[2][]; a[0]=new int[]{1,2};a[1]=new int{3,4,5};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值