• 0-转换原则
  • 1-int类型不能显示强转为boolean
  • 2-高向低转换必须强转且会丢失精度
  • 3-涉及bytecharshort的运算均强转为int格式
  • 4-Math类中的roundceilfloor
  • 5-汉子2个字节英文1个字节resourceBundle处理国际化
  • 6-数组的初始化


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();
  1. 类类型向字符串转换
    正向转换:因为每个类都是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进行比较【左值】
if(1)  由于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};
  1. 二维数组的声明: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};