目录

1.类型转换

1.自动类型转换(隐式转换)

2.强制类型转换(显式转换)

2.类型提升

与long之间:int会被提升为long

2.byte与byte之间的运算

 3.总结


1.类型转换

当不同类型之间的变量相互赋值时,会有严格的校验。

如下例子

public class Demo {
    public static void main(String[] args) {
        int a=4;
        long b=4L;
        b=a;
    }
}

 对上面代码进行编译:

java Long对象赋值 java给long赋值_类型转换

 

 发现运行通过编译,a和b都是整型,a的范围小,b的范围大,将a的值赋值给b时,编译器会自动将a提升为long类型,然后进行赋值

若进行如下操作:

public class Demo {
    public static void main(String[] args) {
        int a=4;
        long b=4L;
        //b=a;//通过编译
        a=b;//出现警告
    }
}

 

java Long对象赋值 java给long赋值_赋值_02

 

 如上图:将long类型赋予int类型会出现报错现象,long的范围比int范围大,会存在数据丢失,不安全。

总结:当参与运算数据类型不一致时,就会进行类型转换。

java中类型转换分为两类:自动类型转换(隐式转换)和强制类型转换(显式转换)

1.自动类型转换(隐式转换)

原理:代码不需要任何处理,在代码进行编译时,编译器会自动进行处理

特点:数据范围小的 转为 数据范围大的自动进行

正如下面例子就是编译器自动将a提升为long类型,然后进行赋值

public class Demo {
    public static void main(String[] args) {
        int a=4;
        long b=4L;
        b=a;
    }
}

2.强制类型转换(显式转换)

原理:当进行操作时,代码要经过一定的格式处理,不能自动而完成

特点:将数据范围大的 转换为 数据范围小

int a=4;
long b=4L;
a=(int)b;//long--->int 数据范围由大到小,进行强制转换

 但是要注意必须是相同的数据类型之间才能进行转换

比如:

int a=4;
boolean d=true;
a=d;
d=a;

对如上代码进行编译:

 

java Long对象赋值 java给long赋值_赋值_03

 说明不兼容的数据类型之间不能进行强制转换

总结

1.不同的数字类型之间进行赋值,范围更小的可以隐式转换成范围更大的

2.如果要将范围大的转换成范围小的,则需要进行强制转换,但是可能出现数据缺失

3.对于一个字面值常量进行赋值时,Java会自动对其范围进行检查

4.强制类型转换时不一定能成功,不相干不兼容的类型之间是不能进行强制转换的

2.类型提升

原理:不同的数据类型进行运算时,数据类型小的会被提升为数据类型大的

与long之间:int会被提升为long

java Long对象赋值 java给long赋值_类型转换_04

 对上面代码进行改进:

int a=10;
long b=20;
long c=a+b;//编译成功,a+b--->int+long----->long+long,赋值给long
int c1=(int)(a+b);//也能编译成功,但是在强转的时候,可能出现数据丢失

2.byte与byte之间的运算

对于如下代码,猜测,c=30并且可以运行成功

public static void main(String[] args) {
    byte a=10;
    byte b=20;
    byte c=a+b;
}

但是运行之后,出现了报错:

java Long对象赋值 java给long赋值_java Long对象赋值_05

那么为什莫尼?

原因是:虽然a和b都是byte类型,但是a+b会将a和b都提升为int类型,再进行运算,得到的结果还是int,再赋给c的话,就会出现报错了

修改:

byte a=10;
byte b=20;
int c=a+b;
System.out.println(c);

//或者

byte a=10;
byte b=20;
byte c=(byte)(a+b);
System.out.println(c);

总结:

1.不同类型的数据进行混合运算,范围小的会提升为范围大的

2.对于byte \short 这样的比4个字节小的类型,会先提升为4个字节的int,再进行运算

 3.总结

本篇文章大致总结了强制类型转换与自动类型转换,概括了int与long、byte与byte之间的类型提升的相关知识,在进行相关问题学习时多多注意如下问题:

1.不同的数字类型之间进行赋值,范围更小的可以隐式转换成范围更大的

2.如果要将范围大的转换成范围小的,则需要进行强制转换,但是可能出现数据缺失

3.强制类型转换时不一定能成功,不相干不兼容的类型之间是不能进行强制转换的

4.不同类型的数据进行混合运算,范围小的会提升为范围大的

5.对于byte \short 这样的比4个字节小的类型,会先提升为4个字节的int,再进行运算