关于Integer.parseInt()和转换的初学者Java问题

所以当像下面的声明中那样投射时: –

int randomNumber=(int) (Math.random()*5) 

它导致随机的没有。 生成以转换为int ..

还有这种方法,我刚刚遇到Integer.parseInt(),它做同样的事情!

即返回一个整数

为什么两种不同的方法使值成为int?

我也进行了搜索,它说parseInt()将字符串作为参数。所以这是否意味着parseInt()只能将String转换为整数?

那么这个铸造呢(int)?? 我们可以使用它将字符串转换为int吗?

抱歉,如果它听起来像一个愚蠢的问题..我只是困惑,并试图了解

帮帮我 ?

Integer.parseInt与cast无法做同样的事情。

我们来看看你的第一个例子:

 int randomNumber=(int) (Math.random()*5) 

Math.random返回一个double,当你将double乘以int时,Java认为结果是double。 因此,表达式Math.random()* 5的类型为double。 您要做的是将该值赋给int类型的变量。 默认情况下,Java不允许您为int类型的变量分配double值,而不明确告诉编译器可以这样做。 基本上你可以考虑将一个double转换为int来告诉编译器,“我知道这个int变量不能保存这个double值的小数部分,但是没关系,只需截断它。”

现在看一下String到int的转换:

 int value = Integer.parseInt("5"); 

字符串“5”不能立即转换为整数。 与双精度不同,根据定义,可以通过删除小数部分将其转换为整数,不能轻易地或一致地将字符串转换为int。 “5”,“042”和“1,000”都有整数表示,但类似“Hello,World!” 才不是。 因此,没有用于将String转换为int的一阶语言function。 相反,您使用方法来解析String并返回值。

所以回答你的所有问题:

为什么两种不同的方法使值成为int?

您必须考虑要转换的值的类型。 如果要将基元转换为int,则可以使用转换,如果要转换对象,则需要使用某种特定于该类型的转换方法。

我也进行了搜索,它说parseInt()将字符串作为参数。所以这是否意味着parseInt()只能将String转换为整数?

正确。 您不能将任何其他类型传递给parseInt方法,否则您将收到编译器错误。

那么这个铸造呢(int)?? 我们可以使用它将字符串转换为int吗?

不,转换为int仅适用于原始值,而在Java中,String不是原始值。

在您的示例中,您将一个浮点数转换为int。 但是,Integer.parseInt()从String中读取整数值。

你只能在兼容类型之间进行转换(我链接到JLS,但对于初学者问题可能太多了)。

施法基本上只是取一个值并说,“嘿,这个东西是双重的?现在它是一个整数。所以那里。”

你不能用字符串来做,因为它不像int。 你必须改为解析一个int,这实际上比听起来要难得多。 幸运的是,它已经为您实现,因此您不必担心它是如何工作的。

转换只能从一种数字类型转换为另一种数字类型。 解释字符串(也就是解析)需要通过方法调用来完成。

让我们从顶部开始。

 int randomNumber=(int) (Math.random()*5); 

是的,这确实给出了0到4之间的随机整数,但这不是正确的做法。 你看,如果你忘了一个括号,即你输入

 int notSoRandomNumber=(int) Math.random()*5; 

你总是会得到0,因为施法的优先级高于乘法。 也就是说,Math.random()的结果首先被强制转换为一个整数,该整数总是0,然后它乘以5,它仍然是0。

我赞成使用java.util.Random来生成随机整数。 qv http://java.sun.com/javase/6/docs/api/java/util/Random.html#nextInt(int)

只能在“兼容类型”之间进行转换。 对于原始类型及其包装器(即int,Integer,long,Long和c),您总是可以在它们之间进行转换,并注意某些转换会丢失信息。 例如,当将long转换为int时,long可能包含大于Integer.MAX_VALUE的数字。 这种类型的Java基本上都是从C ++中获取的,而它又来自C语言。

至于铸造物体,它实际上更简单。 简单地问“这个对象是o,是X吗?” 如果是这样那么(X)o是有意义的并且具有静态类型X.如果o不是X并且你还是尝试强制转换,你将得到一个ClassCastException,表示o的动态(运行时)类型与X不兼容。这将是当你得到静态和动态(运行时)类型的对象之间的差异时,可能会更有意义。

以下代码将String转换为int而不使用任何方法

 public class MyStringToNumber { public static int convert_String_To_Number(String numStr){ char ch[] = numStr.toCharArray(); int sum = 0; //get ascii value for zero int zeroAscii = (int)'0'; // '0'=48 zeroAscii=48 for(int i=0;i 

输出“3256” - > 3256

  1. Parse()方法有多种格式,Integer类有方法ParseInt()这是一个静态方法,我们通过Integer.ParseInt()来调用这个方法

  2. 类似地,Double类具有ParseDouble(),我们将其称为Double.ParseDouble()。

  3. 更通用的方式是XXXX.ParseXXXX()

  4. 此方法的主要用途是将任何Object转换为Primitive。

  5. 在这里你可以提出一个问题,为什么我们需要转换成基元? 答案是,我们知道原语存储在堆栈区域中,对象存储在堆区域中,您不希望浪费堆内存,并且可以将对象转换为基元。

  6. 另一方面,在访问任何对象时,可能存在开销。 最好用作基元。