Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “浮动”和“浮动”之间有什么区别;1“;和浮动;1f“;在爪哇?_Java_Variables_Floating Point - Fatal编程技术网

Java “浮动”和“浮动”之间有什么区别;1“;和浮动;1f“;在爪哇?

Java “浮动”和“浮动”之间有什么区别;1“;和浮动;1f“;在爪哇?,java,variables,floating-point,Java,Variables,Floating Point,在Java中,定义浮点变量(例如:this:1和this:1f)之间有什么区别吗?当我编写1时,JVM是否在运行时执行任何强制转换,或者执行可能会减慢我的应用程序速度的操作 考虑1隐式地被视为int文字,其中1f被视为float文字 见 基本上1将默认为int。如果您写入1f,它将被视为浮点。如果您编写1.0(无f),它将默认为double 如果浮点文本的后缀为 ASCII字母F或F;否则它的类型是double,可以 可以选择使用ASCII字母D或D作为后缀 如果出现这种情况,JVM将通过它

在Java中,定义浮点变量(例如:this:
1
和this:
1f
)之间有什么区别吗?当我编写
1
时,JVM是否在运行时执行任何强制转换,或者执行可能会减慢我的应用程序速度的操作


考虑

1隐式地被视为
int
文字,其中
1f
被视为
float
文字


  • 基本上
    1
    将默认为
    int
    。如果您写入
    1f
    ,它将被视为
    浮点
    。如果您编写
    1.0
    (无f),它将默认为
    double

    如果浮点文本的后缀为 ASCII字母F或F;否则它的类型是double,可以 可以选择使用ASCII字母D或D作为后缀


    如果出现这种情况,JVM将通过它

    public class Test {
    
        public static void main(String[] args) {
            float f = 1;
            System.out.println(f);
        }
    }
    
    但如果您执行以下操作,则会发生异常:

    public class Test {
    
        public static void main(String[] args) {
            float f = 1.5;
        }
    }
    
    例外情况:

    Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - possible loss of precision
      required: float
      found:    double
        at package.Test.main(Test.java:17)
    
    对于这两个示例,我们可以分析的是,对于第一个示例,它会自动转换为
    float
    ,但是对于第二个示例,如果您添加一些没有
    f
    f
    后缀的小数点,那么它会自动转换为
    double
    Java代码

        float f1 = 1;
        float f2 = 1f;
    
    编译为以下字节码:

         0: fconst_1      
         1: fstore_1      
         2: fconst_1      
         3: fstore_2    
    

    正如您所看到的,在运行时没有差异。

    是的,
    1
    1f
    之间有很大的差异。由于不能在java中声明变量而不给出其类型,因此它的clear
    1
    是一个
    int
    1f
    表示编译时本身的
    float
    。这与运行时间或减慢应用程序速度无关

    float a = 1;
    float b = 1f;
    
    这是一样的,但如果你做了以下事情:

    int a = 1f 
    
    将抛出“类型不匹配:无法从float转换为int”

    将抛出“类型不匹配:无法从double转换为int”

    将抛出“类型不匹配:无法从double转换为float”

    请注意:

    double a = 2.0;
    double b = 2d;
    double c = 2.0f;
    if (a == b) {
        if (c == a) {
            if (c == b) {
                return 1;
            }
        }
    }
    
    将返回1;



    问候。

    是的,还有我的第二个问题:“当我写1时,JVM会在运行时进行任何类型转换吗,或者会减慢我的应用程序的速度吗?”不,不应该有任何事情会降低你的性能
    float c = 1d or  1.0
    
    double a = 2.0;
    double b = 2d;
    double c = 2.0f;
    if (a == b) {
        if (c == a) {
            if (c == b) {
                return 1;
            }
        }
    }