Java 字符串和创建对象哪个更有效

Java 字符串和创建对象哪个更有效,java,Java,我创建了两个对象,它们只接受一个私有字符串字段和各自的getter和setter。此对象是不可变的,仅用于存储单个字符串 e、 g 我的问题是,对于大多数用例,使用标准对象字符串而不是创建的对象国家/地区是否更有效?如果有其他属性,如时区、快捷码等,稍后将添加到国家/地区类中 如果您确定永远只有一个属性,那么该类是完全冗余的。只要在任何地方使用字符串作为属性即可。如果有其他属性,如时区、快捷码等,稍后将添加到Country类中 如果您确定永远只有一个属性,那么该类是完全冗余的。只要在任何地方使用

我创建了两个对象,它们只接受一个私有字符串字段和各自的getter和setter。此对象是不可变的,仅用于存储单个字符串

e、 g


我的问题是,对于大多数用例,使用标准对象字符串而不是创建的对象国家/地区是否更有效?

如果有其他属性,如时区、快捷码等,稍后将添加到国家/地区类中


如果您确定永远只有一个属性,那么该类是完全冗余的。只要在任何地方使用字符串作为属性即可。

如果有其他属性,如时区、快捷码等,稍后将添加到Country类中


如果您确定永远只有一个属性,那么该类是完全冗余的。只要在任何地方使用字符串作为属性即可。

如果您确定对象将包含单个字符串属性

您对此属性没有任何限制(例如,不允许在此字符串中使用数字或限制长度) 选择Sting而不是自定义对象

原因?

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


    当我说:如果你对这个属性没有任何限制,使用自定义对象,我的意思是,虽然这些限制也可以在没有自定义对象的情况下设置,但是如果你在自定义对象中这样做,如果您确信您的对象将包含单个字符串属性,则不必重复代码,这样会更有效。

    您对此属性没有任何限制(例如,不允许在此字符串中使用数字或限制长度) 选择Sting而不是自定义对象

    原因?

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


    当我说:如果你对这个属性没有任何限制,那么使用自定义对象。我的意思是,虽然这些限制也可以在没有自定义对象的情况下设置,但是如果你在自定义对象中这样做,那么从这个意义上说,你就不必重复代码了。首先,您的国家/地区课程不是一成不变的。你可以称之为
    setName
    方法以后更改它。要保持不变,它必须看起来像 这:


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

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

  • 您可以稍后添加有关国家的更多信息,例如其时区, 货币

  • 类型安全。考虑这两种方法:

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

  • 你必须自己权衡这两个方面,并决定什么是最好的 对于您的项目,因为没有适合每个人的正确答案。但不要只是 根据默认值选择内存效率最高的解决方案;可维护性和
    健壮性也是值得的。

    首先,你的国家级不是一成不变的。你可以称之为
    setName
    方法以后更改它。要保持不变,它必须看起来像 这:


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

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

  • 您可以稍后添加有关国家的更多信息,例如其时区, 货币

  • 类型安全。考虑这两种方法:

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

  • 你必须自己权衡这两个方面,并决定什么是最好的 对于您的项目,因为没有适合每个人的正确答案。但不要只是 根据默认值选择内存效率最高的解决方案;可维护性和
    健壮性也是值得的。

    如果您只打算将其用作字符串,那么是的,将其包装在自己的类中是不必要的开销。您的Country对象不是不可变的。与您的问题无关,但如果
    setName
    具有公共访问权限,则您的类不是不可变的。使用immutable,我试图说类型Country将永远不会被动态修改(反射)。如果您只将其用作字符串,那么是的,将其包装在自己的类中是不必要的开销。您的Country对象不是不可变的。与您的问题无关,但是如果
    setName
    具有公共访问权限,则您的类不是不可变的。使用immutable,我试图说类型Country永远不会被动态修改(反射)第一种方法只接受国家对象,所以很难误用这就是为什么我从这个方法开始
    void doSomething(Country country);
    void doSomething(String country);