System.out.println((long)(46341*46341));
System.out.println((long)46341*46341);
如题,第二个能转换成功,第一个就会失败
System.out.println((long)(46341*46341));
System.out.println((long)46341*46341);
如题,第二个能转换成功,第一个就会失败
System.out.println((long)(46341*46341)) => 并不是类型转换失败,这里先进行两个int类型的乘法,结果超过了int类型的取值范围,得到一个错误的值,再进行转换得到的值自然也是错的;
System.out.println((long)46341*46341) => 这个先进行了转换,再进行乘法时后面的int类型也自动转成long,结果不会溢出,所以转换成功了;
第一个式子把值改小点,结果在int范围内就能成功了;