Java除了数字类型的自动隐式类型转换,对类有类似功能么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java除了数字类型的自动隐式类型转换,对类有类似功能么?相关的知识,希望对你有一定的参考价值。

在 Java 中,除了数字类型的自动隐式类型转换之外,类之间也可以进行自动类型转换。
如果一个类型的对象实现了另一个类型的接口,或者一个类型的对象是另一个类型的子类,那么就可以将前者自动转换为后者的类型。
例如,假设有两个类 A 和 B,其中 A 是 B 的子类。那么可以将 A 类型的对象自动转换为 B 类型,如下所示:
A a = new A();
B b = a; // 自动类型转换
这种自动类型转换的机制在 Java 中称为多态(Polymorphism)。
参考技术A 自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理,特点:数据范围小的转为数据范围大的时会自动进行。
强制类型转换
强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成,特点:数据范围大的转为数据范围小的
1.小类型转为大类型是自动提升的
1.1小类型变变量赋值给大类型时,例:long a = 20;
1.2小类型和大类型进行数学运算时,首先会将小类型提升为大类型而后进行数学运算,

1.2.1 int 和 long 之间转换:
int a = 10;
long b = a + 1L;
//int + long = long + long, a 提升为long类型
1
2
3
1
2
3
1.2.2 int 和 double 之间转换:
int a = 4;
double b = 2;
//int / double -> double / double,a 提升为double类型
System.out.println(a/b);
1
2
3
4
1
2
3
4
2.大类型转为小类型需要强制类型转换,可能会导致数据精度丢失(数据溢出或部分数据丢失)

2.1 long 和 int 之间转换:
long b = 100L;
//long -> int需要强制类型转换
int c = (int) b;
1
2
3
1
2
3
2.2 double 和 int 之间转换:
double c = 1.0;
//double -> int需要强制类型转换
int d = (int) c;
1
2
3
1
2
3
3.特殊强调
3.1 int 和 byte 之间的转换:
int a = 10;
byte b = (byte)a;//大到小,强转
int c = b;//小到大,自动提升
1
2
3
1
2
3
image-20220404184210950
对于数值型和字符型来说,小于4字节的数据类型,在存储时会转为4字节。byte类型在保存时会转为int类型。
当把byte类型保存区间之内的整数赋值给byte时,可以直接赋值,超出byte的范围仍然需要强制类型转换。
image-20220404184507286
image-20220404184555787
image-20220404184616894

数据类型转换

在Java中,一些数据类型之间是可以相互转换的。

  • 隐式类型转换(自动类型转换)
  • 强制类型转换

隐式类型转换

隐式类型转换:在程序中保存的数据类型不一致时,java会自动自动类型提升。

要能够自动转换,必须遵守Java中的自动转换的规则:可以把小空间中的数据塞进大空间。

byte 空间中的数据, 可以自动的转成 short int long float double

但是不能把double 保存在 byte 、int 、 short 、long 等空间。

案例代码

public class TypeCastDemo {
    public static void main(String[] args) {
        //定义两个int类型的变量
        int a = 3;
        int b = 4;
        int c = a + b;
        System.out.println(c);
        
        //定义一个byte类型,定义一个int类型
        //我能不能不直接输出,用一个变量接收呢?
        byte bb = 2;
        int cc = 5;
        System.out.println(bb + cc);
        
        //用变量接收,这个变量应该有类型
        //可能损失精度
        //byte dd = bb + cc;
        int dd = bb + cc;
        System.out.println(dd);
    }
}

转换规则

容量小的类型可自动转换为容量大的数据类型 。

byte、short、char-->int-->long-->float-->double

强制转换

注意:强制类型转换:它一般都会有数据的丢失。不建议强制转换。

格式:需要转成的数据类型 变量名 = ( 需要转成的数据类型 )( 被转的数据 );

案例1:

double d=3.14;
//int i=d;//报错
int i=(int)d;
System.out.println(i);
注意:
int i4 = (int )dd + 3.14; 后面的3.14是double,还得进行一次强转。int((int )dd + 3.14);
int i=(int)(dd+3.14);编译成功。

案例2:

byte b = 127;
System.out.println((byte)(b+1));//输出结果-128,因为byte类型的数据范围:-128~127

ASCII编码表

public static void main(String[] args) {
  //字符类型变量
  char c = 'a';
  int i = 1;
  //字符类型和int类型计算
  System.out.println(c+i);//输出结果是98
}

在计算机的内部都是二进制的0、1数据,如何让计算机可以直接识别人类文字的问题呢?就产生出了编码表的概念。

编码表 :就是将人类的文字和一个十进制数进行对应起来组成一张表格。可以理解为是一个字典。

人们就规定:

字符 数值
0 48
9 57
A 65
Z 90
a 97
z 122

将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII:
American Standard Code for Information Interchange 美国标准信息交换码

小贴士:
在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。char类型提升为了int类型。char类型内存2个字节,int类型内存4个字节。

以上是关于Java除了数字类型的自动隐式类型转换,对类有类似功能么?的主要内容,如果未能解决你的问题,请参考以下文章

Java中的各种数据类型的转换

Java中的各种数据类型的转换

Java数据类型的转换:隐式(自动)转换与强制转换

数据类型转换

数据类型转换

0098 数据类型转换 之 转为数字: parseInt parseFloat Number()隐式转换