Question

Que fait Java avec les variables longues lors de l'ajout?

Mauvaise version 1:

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

Mauvaise version 2:

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

Version correcte:

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

Je ne comprends pas pourquoi Java les concatène.

Quelqu'un peut-il m'aider, pourquoi deux variables primitives sont-elles concaténées?

Salutations, guerda

Était-ce utile?

La solution

Je suppose que vous ne voyez pas ce que vous pensez voir. Java ne le fait pas.

Essayez de fournir un programme bref mais complet qui le démontre. Voici un programme court mais complet qui démontre un comportement correct, mais avec votre "faux" code (c'est-à-dire un contre-exemple).

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

Autres conseils

Je suppose que vous faites réellement quelque chose comme:

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

Cette expression est évaluée de gauche à droite:

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

Pour que cela fonctionne, vous devez procéder comme suit:

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

Encore une fois, cela est évalué de gauche à droite:

"" + (expression) <-- string concatenation - need to evaluate expression first
(3 + 2)           <-- 5
Hence:
"" + 5            <-- string concatenation - will produce "5"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top