Java在执行添加时对长变量做了什么?

错误的版本1:

Vector speeds = ... //whatever, speeds.size() returns 2
long estimated = 1l;
long time = speeds.size() + estimated; // time = 21; string concatenation??

错误的版本2:

Vector speeds = ... //whatever, speeds.size() returns 2
long estimated = 1l;
long time = estimated + speeds.size(); // time = 12; string concatenation??

正确版本:

Vector speeds = ... //whatever, speeds.size() returns 2
long estimated = 1l;
long size = speeds.size();
long time = size + estimated; // time = 3; correct

我不明白,为什么Java会将它们连接起来。

任何人都可以帮助我,为什么要连接两个原始变量?

问候,guerda

有帮助吗?

解决方案

我怀疑你没有看到你认为你所看到的。 Java没有这样做。

请尝试提供简短但完整的计划,以证明这一点。这是一个简短但完整的程序,它可以显示正确的行为,但是您的“错误”行为是正确的。代码(即反例)。

import java.util.*;

public class Test
{
    public static void main(String[] args)
    {
        Vector speeds = new Vector();
        speeds.add("x");
        speeds.add("y");

        long estimated = 1l;
        long time = speeds.size() + estimated;
        System.out.println(time); // Prints out 3
    }
}

其他提示

我的猜测是你实际上在做的事情:

System.out.println("" + size + estimated); 

此表达式从左到右进行评估:

"" + size        <--- string concatenation, so if size is 3, will produce "3"
"3" + estimated  <--- string concatenation, so if estimated is 2, will produce "32"

要使其发挥作用,您应该:

System.out.println("" + (size + estimated));

再次从左到右评估:

"" + (expression) <-- string concatenation - need to evaluate expression first
(3 + 2)           <-- 5
Hence:
"" + 5            <-- string concatenation - will produce "5"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top