Java中返回字符串的函数

7

我编写了以下函数,将毫秒时间转换为格式为分钟:秒钟的字符串。作为一名前C程序员,我认为“ans”必须是静态的才能正常工作,但在String之前放置static似乎不被允许。

我的问题是-这个函数会工作吗-如果不行,有什么改变可以使它工作。

我编写了以下函数将毫秒转化为min:sec的形式,由于我以前是一名C程序员,所以我假设“ans”需要是静态的才能正常工作,但是在String之前加上static似乎不被允许。请问这个函数是否有效?如果无效,应该如何修改才能让其有效?
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;
    }
}

1
你不能看出它是否有效吗?试试看。 - skaffman
你可能需要考虑更改方法的名称。Java方法名称几乎总是采用驼峰命名法,例如timeToString(...)。这并不是强制性的,但在Java世界中,命名标准非常规范化。 - user130076
使用System.currentTimeMillis()返回22125128:29。 - Brian Colvin
@skaffman:我目前正在追踪一个错误,这可能是出错的潜在原因之一。我需要确认它是否合法。 - Mick
@skaffman:我不知道什么是单元测试。 - Mick
显示剩余2条评论
2个回答

11
你的代码是没有问题的。在这种方式下,返回 Strings 没有任何问题。
在Java中,String 是对不可变对象的引用。这个特性和垃圾收集机制能帮我们解决许多潜在的复杂性:你可以随意传递 String,而不必担心它会消失,或者被其他人修改。
如果你不介意我提出几个风格上的建议,我会像这样修改代码:
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);
    }
}

正如您所看到的,我已经把变量声明尽可能地放在了下面(这是C++和Java中首选的样式)。我还消除了ans并用单个调用String.format()替换了字符串连接和String.format()的混合。


3
在Java中,String是指向堆分配存储的引用。返回“ans”只返回引用,因此不需要栈分配存储。事实上,在Java中没有办法将对象分配到栈存储器中。
我会做出以下改变。你根本不需要“ans”。
return String.format("%d:%d", mins, secs);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接