2

足し算の実行中に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がそれらを連結する理由がわかりません。

なぜ2つのプリミティブ変数が連結されているのですか?

ごきげんよう、ゲルダ

4

2 に答える 2

22

私の推測では、あなたは実際に次のようなことをしています:

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"
于 2008-10-28T12:28:09.580 に答える
4

自分が見ていると思っているものが見えていないのではないかと思います。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
    }
}
于 2008-10-28T12:15:22.290 に答える