Java类型转换之自动类型转换和强制类型转换区别理解总结

首先 , 晒出一段测试代码

/*
* java中基本数据类型转换的总结 (需要运算的值类型相同)
*/

// 声明测试变量
int a;
int b;
long c;

// 分割线
System.out.println("\n-------------------------------------------------------------------------------------------");
System.out.println("-------------------------------------需要运算的值类型是相同的------------------------------------");
System.out.println("------------------------------------Int最大值:" + Integer.MAX_VALUE+"------------------------------------");
System.out.println("--------------------------------Long最大值:" + Long.MAX_VALUE+"------------------------------");
System.out.println("-------------------------------------------------------------------------------------------\n");

// 自动类型转换(a * b的值小于int类型的最大值)
a = 1;
b = 2147483647;
c = a * b;
System.out.println("----------------------------------------c = a * b------------------------------------------");
System.out.println("自动类型转换(a * b的值小于或等于int类型的最大值) : a的数值为:" + a + ",b的数值为:" + b + ",c的数值为:" + c);

// 强制类型转换(a * b的值小于int类型的最大值)
a = 1;
b = 2147483647;
c = (long) a * b;
System.out.println("\n-------------------------------------c = (long) a * b--------------------------------------");
System.out.println("强制类型转换(a * b的值小于或等于int类型的最大值) : a的数值为:" + a + ",b的数值为:" + b + ",c的数值为:" + c);
System.out.println("\n-------------------------------------------------------------------------------------------");

// 分割线
System.out.println("----------上面的是a * b的值小于或等于int类型的最大值-------下面的是a * b的值大于int类型的最大值-----------");
System.out.println("-------------------------------------------------------------------------------------------\n");

// 自动类型转换(a * b的值大于int类型的最大值)
a = 2;
b = 2147483647;
c = a * b;
System.out.println("----------------------------------------c = a * b------------------------------------------");
System.out.println("自动类型转换(a * b的值大于int类型的最大值) : a的数值为:" + a + ",b的数值为:" + b + ",c的数值为:" + c);

// 强制类型转换(a * b的值大于int类型的最大值)
a = 2;
b = 2147483647;
c = (long) a * b;
System.out.println("\n-------------------------------------c = (long) a * b--------------------------------------");
System.out.println("强制类型转换(a * b的值大于int类型的最大值) : a的数值为:" + a + ",b的数值为:" + b + ",c的数值为:" + c);

// 分割线
System.out.println("-------------------------------------------------------------------------------------------\n");
System.out.println("------------------------------------------最后总结-------------------------------------------");
System.out.println("------------------------------------如果运算的值类型是相同的-------------------------------------\n");
System.out.println("-----------------------------------------自动类型转换-----------------------------------------");
System.out.println("-------------------------在运算结果不超过本身值类型最大值的情况下,运算结果没问题------------------------");
System.out.println("-----------------------但是如果运算结果超过了本身值类型最大值的情况下,运算结果有误!----------------------\n");
System.out.println("-----------------------------------------强制类型转换-----------------------------------------");
System.out.println("-------------------------在运算结果不超过本身值类型最大值的情况下,运算结果没问题------------------------");
System.out.println("------------------------如果运算结果超过了本身值类型最大值的情况下,运算结果没问题!----------------------");

接下来是测试结果显示图片

这里写图片描述

通过测试的结果,我有了两个猜测

( 需要运算的值类型相同 ) 自动类型转换 和 强制类型转换 的执行过程为:

猜测一 :
自动类型转换 , 为 先进行值之间的运算 , 然后把结果值的类型转换
强制类型转换 , 为 先将需要运算的值进行类型转换 , 然后进行值之间的运算

猜测二 :
自动类型转换 , 使用 运算的值类型最大值为界限 , 如果 超出了这个值 , 那么 运算将出错
强制类型转换 , 使用 需要强转的值类型最大值为界限 , 如果 超出了这个值 , 那么 运算将出错

再晒出一段代码

/*
 * java中基本数据类型转换的总结 (需要运算的值类型不同)
 */

// 声明测试变量
int a;
long b;
long c;

// 分割线
System.out.println("\n-------------------------------------------------------------------------------------------");
System.out.println("-------------------------------------需要运算的值类型是不同的------------------------------------");
System.out.println("------------------------------------Int最大值:" + Integer.MAX_VALUE+"------------------------------------");
System.out.println("--------------------------------Long最大值:" + Long.MAX_VALUE+"------------------------------");
System.out.println("-------------------------------------------------------------------------------------------\n");

// 自动类型转换(c的值小于int类型的最大值)
a = 1;
b = 2147483647;
c = a * b;
System.out.println("----------------------------------------c = a * b------------------------------------------");
System.out.println("自动类型转换(a * b的值小于或等于int类型的最大值) : a的数值为:" + a + ",b的数值为:" + b + ",c的数值为:" + c);

// 强制类型转换(c的值小于int类型的最大值)
a = 1;
b = 2147483647;
c = (long) a * b;
System.out.println("\n-------------------------------------c = (long) a * b--------------------------------------");
System.out.println("强制类型转换(a * b的值小于或等于int类型的最大值) : a的数值为:" + a + ",b的数值为:" + b + ",c的数值为:" + c);

// 分割线
System.out.println("\n-------------------------------------------------------------------------------------------");
System.out.println("----------上面的是a * b的值小于或等于int类型的最大值-------下面的是a * b的值大于int类型的最大值-----------");
System.out.println("-------------------------------------------------------------------------------------------\n");

// 自动类型转换(c的值大于int类型的最大值)
a = 2;
b = 2147483647;
c = a * b;
System.out.println("----------------------------------------c = a * b------------------------------------------");
System.out.println("自动类型转换(a * b的值大于int类型的最大值) : a的数值为:" + a + ",b的数值为:" + b + ",c的数值为:" + c);

// 强制类型转换(c的值大于int类型的最大值)
a = 2;
b = 2147483647;
c = (long) a * b;
System.out.println("\n-------------------------------------c = (long) a * b--------------------------------------");
System.out.println("强制类型转换(a * b的值大于int类型的最大值) : a的数值为:" + a + ",b的数值为:" + b + ",c的数值为:" + c);

// 分割线
System.out.println("-------------------------------------------------------------------------------------------\n");
System.out.println("------------------------------------------最后总结-------------------------------------------");
System.out.println("------------------------------------如果运算的值类型是不同的-------------------------------------\n");
System.out.println("-----------------------------------------自动类型转换-----------------------------------------");
System.out.println("------------------------在运算的时候,会将不相同的数据类型转换成相同的数据类型然后在开始运算----------------\n");
System.out.println("-----------------------------------------强制类型转换-----------------------------------------");
System.out.println("------------------------在运算的时候,会将不相同的数据类型转换成相同的数据类型然后在开始运算----------------");

接下来是测试结果显示图片

这里写图片描述

通过测试的结果,我有了个猜测

( 需要运算的值类型不同 ) 自动类型转换 和 强制类型转换 的执行过程为:

猜测 :
运算的时候 , 会将需要运算的 不相同的数据类型 全部转换成 参与运算中数据类型中最大的那个数据类型

发布了10 篇原创文章 · 获赞 2 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览