functie om een string in java terug te geven

Ik heb de volgende functie geschreven om een tijd in milliseconden om te zetten naar een tekenreeks met de notatie mins:seconds. Als voormalig C-programmeur ging ik ervan uit dat “ans” statisch zou moeten zijn om goed te kunnen werken, maar het lijkt niet toegestaan om static voor String te plaatsen.

Mijn vraag is – zal deze functie werken – en zo niet, welke verandering zal ervoor zorgen dat deze werkt.

public String time_to_string(long t) // time in milliseconds
{
    String ans;
    int mins,secs;
    if (t < 0)
    {
        return "-";
    }
    else
    {
        secs = (int)(t/1000);
        mins = secs/60;
        secs = secs - (mins * 60);
        ans = ""+mins+":"+String.format("%02d", secs);
        return ans;
    }
}

Antwoord 1, autoriteit 100%

Je code is in orde. Het is geen probleem om op deze manier Stringste retourneren.

In Java is een Stringeen verwijzing naar een onveranderlijk object. Dit, in combinatie met het verzamelen van afval, zorgt voor een groot deel van de potentiële complexiteit: je kunt gewoon een Stringdoorgeven zonder je zorgen te maken dat het op je zou verdwijnen, of dat iemand het ergens zou wijzigen.

Als je het niet erg vindt dat ik een paar stilistische suggesties doe, zou ik de code als volgt aanpassen:

public String time_to_string(long t) // time in milliseconds
{
    if (t < 0)
    {
        return "-";
    }
    else
    {
        int secs = (int)(t/1000);
        int mins = secs/60;
        secs = secs - (mins * 60);
        return String.format("%d:%02d", mins, secs);
    }
}

Zoals je kunt zien, heb ik de variabele aangiften zo ver ingedrukt als ik kon (dit is de voorkeursstijl in C++ en Java). Ik ben ook geëlimineerd ansen heb de mix van String Concentatie en String.format()met één gesprek naar String.format().


Antwoord 2, Autoriteit 27%

In Java is een string een verwijzing naar heap-toegewezen opslag. Terugkerende “ANS” retourneert alleen de referentie, dus er is geen behoefte aan stapel toegewezen opslag. In feite is er geen manier in Java om objecten in stapelopslag toe te wijzen.

Ik zou echter veranderen. Je hebt helemaal geen “Ans” nodig.

return String.format("%d:%d", mins, secs);

Other episodes