Java 使用(int)将双精度转换为int

Java 使用(int)将双精度转换为int,java,casting,Java,Casting,我是一个初学者,我搜索了又搜索,但找不到这个问题的答案。我理解inttest=(int)(5.4)将双精度转换为int,但我不明白(int)是什么。它似乎不是作为方法或类编写的。它是以一种我还没有见过的独特方式编写的,我正在试图理解为什么这个语句在Java中工作。我本以为会有类似inttest=Math.int(5.4)的东西。我不明白这句话为什么有效。我希望这是有意义的。这是“铸造操作员”。它在Java语言中有自己的特殊语法(即,它不是方法调用) 它也适用于对象: BigInteger n

我是一个初学者,我搜索了又搜索,但找不到这个问题的答案。我理解
inttest=(int)(5.4)
将双精度转换为int,但我不明白
(int)
是什么。它似乎不是作为方法或类编写的。它是以一种我还没有见过的独特方式编写的,我正在试图理解为什么这个语句在Java中工作。我本以为会有类似
inttest=Math.int(5.4)
的东西。我不明白这句话为什么有效。我希望这是有意义的。

这是“铸造操作员”。它在Java语言中有自己的特殊语法(即,它不是方法调用)

它也适用于对象:

 BigInteger n = (BigInteger) session.getAttribute("a number");
它有两个用途:

  • 不同数字类型之间的转换
  • 告诉编译器给定对象的类型(*)比编译器可以推断的更具体。这将在运行时进行检查,如果失败,您将得到一个
    ClassCastException
    。编译器还将检查强制转换是否完全不可能,如果完全不可能,编译器将在编译时拒绝它

(*)甚至是一种不太具体的类型

它是简单的将
double
转换为
int
。这是java支持的语法。当对象转换为如下特定类时,您会遇到类似的语法:

(ClassName)objectVariable…

您可以使用诸如Integer、Float之类的包装类,也可以使用它们的方法执行强制转换。

Java允许,这就是(int)(5.4)所做的! 因此,当您强制转换时,请告诉编译器您需要进行类型转换
这些转换不一定与原语相关,您基本上可以使用任何其他有效的数据类型

Java中的强制转换是什么?

嗯,所有的铸造真正的意思是采取一个特定类型的对象,并“把它变成”另一个对象类型。这个过程称为铸造变量

铸造变量的规则是什么? 如果您要强制转换一个变量,那么您很可能正在进行所谓的向下转换。这意味着您正在获取对象并将其转换为更“特定”的对象类型。下面是一个例子:

Object aSentenceObject = "This is a regular sentence";
String aSentenceString = (String)aSentenceObject;
你看到我们在这里做了什么吗?由于type对象是变量的一种非常广泛的类型,因此我们将变量“向下转换”为
String
类型。现在的问题是,这合法吗?您可以看到,存储在
aSentenceObject
中的值只是一个普通的
字符串,因此这种转换是完全合法的。让我们看一看相反的情况,即“向上投射”:

String aSentenceString = "This is just another regular sentence";
Object aSentenceObject = (Object)aSentenceString;
在这里,我们使用一个更特定类型(字符串)的变量,并将其转换为更通用的变量类型(对象)。这也是合法的,实际上,向上投射总是合法的


19基元类型的特定转换称为扩展基元转换:

  • 字节到短、int、long、float或double

  • 短到整数、长到浮点或双精度

  • 字符到int、long、float或double

  • int到long、float或double

  • 长到漂浮或翻倍

  • 浮动至双倍

22基元类型的特定转换称为缩小基元转换:

  • 短到字节或字符

  • 字符到字节或短字符

  • int到字节、short或char

  • 长到字节、短、字符或整数

  • 浮点到字节、短、字符、整型或长

  • 双字节、短字节、字符、整型、长字节或浮点


缩小原语转换可能会丢失有关数值整体大小的信息,也可能会丢失精度和范围。

这是一种转换。如果可以的话,它基本上将对象建模为该数据类型。与大多数类型一起工作(int)被命名为casting,您可以在那里放置任何原语或数据类型,如:(double)foo;或者(MyCar)fooIVehicle…更多信息请注意,您也可以向上转换,即使声明的类型“不那么具体”。然而,这是很少使用的。@zero_cool:没错。例如,这可以用来影响基于声明的参数类型的方法调度。当你使用“casting operator”这个词时,它在我的大脑中发出咔哒声。感谢大家花时间和精力帮助这位初学者。我不确定我是否应该对每个答案发表评论。