哪个更有效 - 字符串或创建的对象

时间:2017-05-24 03:19:19

标签: java

我有一些创建的对象,只占用一个私有String字段和相应的getter和setter。这些对象是不可变的,只能用于存储单个String。

e.g。

public class Country {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

我的问题是,对于大多数用例,使用标准对象String而不是创建对象Country是否更有效?

3 个答案:

答案 0 :(得分:2)

如果您确定您的对象将包含单个String属性

AND

您对此属性没有任何限制(例如,禁止此字符串中的数字或限制长度) 去Sting而不是自定义对象。

<强>原因吗

  1. 字符串是不可变的,这将节省您使自定义对象不可变的努力。
  2. Java特别注意在字符串的情况下管理内存(读取字符串池)。因此,您可以避免因错误而导致任何可能的内存泄漏。
  3. 编辑:

    当我说:如果你没有任何限制要放在这个属性上使用自定义对象我的意思是虽然这些限制可以放在没有自定义对象的情况下但是如果你在自定义对象中执行此操作,那么在您不必复制代码的意义上它会更有效。

答案 1 :(得分:2)

首先,您的国家/地区类不可变。你总是可以打电话给它 setName方法稍后更改它。要变成不可变的,它必须看起来像 这样:

public class Country {

    private final String name;

    public Country(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

回答你的问题:是的,效率更高只有字符串 没有包装类。使用包装类,每个包含两个对象 国家,没有它,只有一个。

但您可能仍然需要包装类,原因有两个:

  1. 您稍后可以添加有关某个国家/地区的更多信息,例如:它的时区  货币,......

  2. 类型安全。考虑以下两种方法:

    void doSomething(Country country);
    void doSomething(String country);
    

    第一个只接受Country对象,因此很难被滥用。该  第二个接受任何类型的字符串,但你仍然必须确保  只传递一个正确的国家名称。  在第一种情况下,编译器可以帮助您避免错误;在第二种情况下  它不能。

  3. 你必须自己衡量这两个方面,并决定什么是最好的 对于您的项目,因为没有正确的答案给大家。但不要只是 每个默认选择最有效的内存解决方案;可维护性和 稳健性也值得。

答案 2 :(得分:1)

如果还有其他属性,如TimeZone,ShortCode等将在稍后添加,请使用Country类。

如果您确定永远只有一个属性,则该类完全是多余的。只要使用String作为属性,无论你在哪里使用它。