Java 0和0之间的区别是什么。在爪哇?

Java 0和0之间的区别是什么。在爪哇?,java,types,floating-point,integer,Java,Types,Floating Point,Integer,我实际上没有特定的代码,但我和一个朋友的代码完全相同,只是他使用了0。我只用了0。我的编辑了,但他的编辑直到他删除了这个点才完成。但是现在,我初始化了一个变量double x=0。无意中,忘记删除点,它被编译了!为什么?在这里猜测一下,您/您的朋友可能有一个不允许浮点的数据类型,比如int和long 像float和double这样的数据类型允许您设置浮点。在这里猜测一下,您/您的朋友可能有一个不允许浮点的数据类型,比如int和long 像float和double这样的数据类型允许您设置一个值。任

我实际上没有特定的代码,但我和一个朋友的代码完全相同,只是他使用了0。我只用了0。我的编辑了,但他的编辑直到他删除了这个点才完成。但是现在,我初始化了一个变量double x=0。无意中,忘记删除点,它被编译了!为什么?

在这里猜测一下,您/您的朋友可能有一个不允许浮点的数据类型,比如int和long


像float和double这样的数据类型允许您设置浮点。

在这里猜测一下,您/您的朋友可能有一个不允许浮点的数据类型,比如int和long


像float和double这样的数据类型允许您设置一个值。

任何带有小数点的数字在形式上都被视为双字面值,即a。在这种情况下,您可以像使用替身一样使用它

因此,用括号标出可选部分的语法是:

数字。[数字][指数部分][浮动类型后缀]

就像你不能这样做一样

int num = 10.6;
int num = 10.;
…你不能这样做

int num = 10.6;
int num = 10.;

…因为这是一个双精度。

任何带小数点的数字都被视为双精度文字,形式上是a。在这种情况下,您可以像使用替身一样使用它

因此,用括号标出可选部分的语法是:

数字。[数字][指数部分][浮动类型后缀]

就像你不能这样做一样

int num = 10.6;
int num = 10.;
…你不能这样做

int num = 10.6;
int num = 10.;

…因为这是一个双重标准。

让我们编写一个示例程序

class A {
    public static void main(String args[]) {
        int a = 1;
        int b = 2.;
        double c = 3;
        double d = 4.;
    }
}
其中三个赋值可以,但其中一个会触发编译错误:

A.java:4: error: possible loss of precision
        int b = 2.;
                ^
  required: int
  found:    double
1 error
发生了什么事?1和3是整数常量;2.四,。是浮点常量。在需要浮点值的上下文中尝试使用整数时,整数值会自动转换为浮点值。这是可能的,因为所有整数值都可以用浮点类型表示

另一方面,int b=2。无效,因为在一般情况下,浮点值不能以整数类型表示。例如,值2.1不能表示为int或任何其他整数类型。Java不会以改变值的方式自动转换值,因此它拒绝任何将浮点值赋给整型变量的尝试。更一般地说,Java拒绝在需要整数时使用浮点值的任何尝试。Java的规则是基于类型的,而不是基于特定的值,因此即使是2也不例外。其中,该值可以解释为拟合整数类型

可以使用强制转换强制转换。当浮点值转换为整数类型时,它将向零舍入,即正值向下舍入,负值向上舍入

int b = (int)2.;
在int和double的情况下,所有int值都可以用double精确表示。这不适用于整数和浮点类型的其他一些组合:例如,long类型的一些大值不能用double类型的值精确表示;但它们可以近似表示,这就足够了,因为浮点值首先是近似值。
²但实际上该值并不合适:2.0表示“近似2”,因为所有浮点值都是近似值,而2表示“整数2”

让我们编写一个示例程序

class A {
    public static void main(String args[]) {
        int a = 1;
        int b = 2.;
        double c = 3;
        double d = 4.;
    }
}
其中三个赋值可以,但其中一个会触发编译错误:

A.java:4: error: possible loss of precision
        int b = 2.;
                ^
  required: int
  found:    double
1 error
发生了什么事?1和3是整数常量;2.四,。是浮点常量。在需要浮点值的上下文中尝试使用整数时,整数值会自动转换为浮点值。这是可能的,因为所有整数值都可以用浮点类型表示

另一方面,int b=2。无效,因为在一般情况下,浮点值不能以整数类型表示。例如,值2.1不能表示为int或任何其他整数类型。Java不会以改变值的方式自动转换值,因此它拒绝任何将浮点值赋给整型变量的尝试。更一般地说,Java拒绝在需要整数时使用浮点值的任何尝试。Java的规则是基于类型的,而不是基于特定的值,因此即使是2也不例外。其中,该值可以解释为拟合整数类型

可以使用强制转换强制转换。当浮点值转换为整数类型时,它将向零舍入,即正值向下舍入,负值向上舍入

int b = (int)2.;
在int和double的情况下,所有int值都可以用double精确表示。这不适用于整数和浮点类型的其他一些组合:例如,long类型的一些大值不能是r 由double类型的值精确表示;但它们可以近似表示,这就足够了,因为浮点值首先是近似值。
²但实际上该值并不合适:2.0表示“近似2”,因为所有浮点值都是近似值,而2表示“整数2”

正如@Turing85所评论的,0是一个整数,0.0是一个双精度点。 很可能是您的朋友使用整数变量来存储双精度值。 比如说

int zeroInteger = 0.;
将不起作用,因为0。是一个双字面值,不能将其赋值给整数变量,至少在没有显式类型转换的情况下不能

double zeroDouble = 0.;
这应该可以工作,因为变量是双精度类型

任何表示值但未存储在变量中的字符序列称为文字。以下是一些有效的Java文本:

你好 1234,0x12,012,1234L 2.3、1E11、2.3D 由于Java支持整数字节、short、int、long和浮点浮点数的多种数据类型,所以它必须预先决定将哪种类型分配给文本值

对于整型文字,默认数据类型为整数;对于浮点数,默认数据类型为双精度

由于浮点文本的默认数据类型是double,所以若我们试图将其分配给浮点变量,Java将给出一个错误

float myFloat = 2.3;
这将给出一个错误。 正确的方法是将文本类型转换为float或只是将f或f附加到它

以上是正确的方法

整数文本也是如此。如果我们试图给字节或短变量分配一个整数文本,Java将产生一个错误。然而,在这里,它通过实际检查赋值是否超出变量的范围来做一些智能的事情,然后只产生错误。 比如说

byte someByte = 127;// is ok
byte someByte = 128; // is not ok

正如@Turing85所评论的,0是一个整数,0.0是一个双精度点。 很可能是您的朋友使用整数变量来存储双精度值。 比如说

int zeroInteger = 0.;
将不起作用,因为0。是一个双字面值,不能将其赋值给整数变量,至少在没有显式类型转换的情况下不能

double zeroDouble = 0.;
这应该可以工作,因为变量是双精度类型

任何表示值但未存储在变量中的字符序列称为文字。以下是一些有效的Java文本:

你好 1234,0x12,012,1234L 2.3、1E11、2.3D 由于Java支持整数字节、short、int、long和浮点浮点数的多种数据类型,所以它必须预先决定将哪种类型分配给文本值

对于整型文字,默认数据类型为整数;对于浮点数,默认数据类型为双精度

由于浮点文本的默认数据类型是double,所以若我们试图将其分配给浮点变量,Java将给出一个错误

float myFloat = 2.3;
这将给出一个错误。 正确的方法是将文本类型转换为float或只是将f或f附加到它

以上是正确的方法

整数文本也是如此。如果我们试图给字节或短变量分配一个整数文本,Java将产生一个错误。然而,在这里,它通过实际检查赋值是否超出变量的范围来做一些智能的事情,然后只产生错误。 比如说

byte someByte = 127;// is ok
byte someByte = 128; // is not ok

对于这个群体来说,这不是一个真正的话题。可能属于StackExchange。但答案是0是一个整数立即数,0。是浮点立即数。扩展@BrianHibbert的注释:更精确地说,0。是类型为double.And的文本,以进一步扩展。问题是信息的转换和丢失。double可以保存任何可以存储为整数的数字,但反过来则不正确。编译器通常会自动将整数原语强制转换为浮点类型,但不会将浮点类型强制转换为整数以防止潜在的数据丢失。此组的主题并非如此。可能属于StackExchange。但答案是0是一个整数立即数,0。是浮点立即数。扩展@BrianHibbert的注释:更精确地说,0。是类型为double.And的文本,以进一步扩展。问题是信息的转换和丢失。double可以保存任何可以存储为整数的数字,但反过来则不正确。编译器通常会自动将整数原语转换为浮点类型,但不会将浮点类型转换为整数以防止潜在的数据丢失。