سؤال

ماذا تفعل 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 بتسلسلها.

هل يمكن لأي أحد أن يساعدني، لماذا يتم ربط متغيرين بدائيين؟

تحياتي يا جيردا

هل كانت مفيدة؟

المحلول

وأظن أنك لا ترى ما كنت تعتقد أنك ترى. جافا لا تفعل هذا.

يرجى محاولة لتوفير لكن كاملة والذي يدل على ذلك. وهنا البرنامج القصير ولكن كاملة والذي يدل على السلوك الصحيح، ولكن مع التعليمات البرمجية "خطأ" (أي نموذج مقاوم).

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