Frage

Was ist Java tun mit langen Variablen während der Durchführung hinaus?

Falsche Version 1:

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

Falsche Version 2:

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

Die korrekte Version:

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

Ich verstehe es nicht, warum Java sie verketten.

Kann jemand mir helfen, warum zwei primitive Variablen sind verketteten?

Grüße, Guerda

War es hilfreich?

Lösung

Ich vermute, Sie sehen nicht, was Sie denken, Sie sehen. Java tut dies nicht.

Bitte versuchen Sie einen kurze, aber vollständige Programm , die dies zeigt. Hier ist ein kurzes, aber vollständiges Programm, die richtige Verhalten zeigt, aber mit Ihrem „falschen“ Code (das heißt ein Gegenbeispiel).

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
    }
}

Andere Tipps

Meine Vermutung ist, Sie tatsächlich tun, so etwas wie:

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

Dieser Ausdruck ausgewertet wird links nach rechts:

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

Um dies zu umgehen, sollten Sie tun:

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

Auch diese links nach rechts ausgewertet:

"" + (expression) <-- string concatenation - need to evaluate expression first
(3 + 2)           <-- 5
Hence:
"" + 5            <-- string concatenation - will produce "5"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top