Integer.parseInt 不会做与强制转换相同的事情。
让我们看一下您的第一个示例:
int randomNumber=(int) (Math.random()*5)
Math.random 返回一个 double,当您将 double 乘以 int 时,Java 认为结果是 double。因此,表达式 Math.random()*5 的类型为 double。您要做的就是将该值分配给 int 类型的变量。默认情况下,Java 不允许您将 double 值分配给 int 类型的变量,除非您明确告诉编译器可以这样做。基本上,您可以将 double 转换为 int 来告诉编译器,“我知道这个 int 变量不能保存这个 double 值的小数部分,但是没关系,只需截断它即可。”
现在看一下 String 到 int 的转换:
int value = Integer.parseInt("5");
字符串“5”不能立即转换为整数。与双精度数不同,根据定义,双精度数可以通过删除小数部分来转换为整数,而字符串不能轻松或一致地转换为整数。 “5”、“042”和“1,000”都有整数表示,但像“Hello, World!”之类的东西。才不是。因此,不存在将 String 转换为 int 的一阶语言功能。相反,您使用一种方法来解析字符串并返回值。
所以回答你所有的问题:
为什么有两种不同的方法来使值成为 int ?
您必须考虑要转换的值的类型。如果要将基元转换为 int,则可以使用强制转换;如果要转换对象,则需要使用特定于该类型的某种转换方法。
我还进行了搜索,它说 parseInt() 将字符串作为参数。那么这是否意味着 parseInt() 只能将 String 转换为整数?
正确的。您不能将任何其他类型传递给 parseInt 方法,否则您将收到编译器错误。
那么这个选角怎么样(int)?我们也可以用它来将字符串转换为 int 吗?
不,转换为 int 仅适用于原始值,并且在 Java 中 String 不是原始值。