String 哪个更好?将整个内容作为字符串传递,还是字符串串联?

String 哪个更好?将整个内容作为字符串传递,还是字符串串联?,string,string-concatenation,String,String Concatenation,嗨,我有20个字符串,除了类名之外,每个字符串都有相同的包结构。这些字符串需要根据需要传递给方法。请参阅以下代码: public static final String RECENT_MSG_ = "com.foo.xxs.RecentMessage"; public static final String PROJ_ = "com.foo.xxs.Proj"; public static final String FORECAST =

嗨,我有20个字符串,除了类名之外,每个字符串都有相同的包结构。这些字符串需要根据需要传递给方法。请参阅以下代码:

public static final String RECENT_MSG_        = "com.foo.xxs.RecentMessage";
public static final String PROJ_              = "com.foo.xxs.Proj";
public static final String FORECAST           = "com.foo.xxs.Forecase";
public static final String REQUEST            = "com.foo.xxs.Request";
public static final String UNAPPROVED         = "com.foo.xxs.UnApproved";
public static final String UNPOSTED           = "com.foo.xxs.Unposeted";
public static final String VACANT             = "com.foo.xxs.Vacant";
public static final String ORG_VIOL           = "com.foo.xxs.OrgViolation";
public static final String ORG_WARN           = "com.foo.xxs.OrgWarning";
public static final String EMP_VIOL           = "com.foo.xxs.EmpViolation";
public static final String EMP_WARN           = "com.foo.xxs.EmpWarning";    
public static final String TS_WARN            = "com.foo.xxs.TSWarn";
public static final String TS_VIOL            = "com.foo.xxs.TSViolation";
public static final String AGE_GROUP          = "com.foo.xxs.AgeGroup";


private void rescheduleTasks(long _taskType,String value)
{
    if(_taskType == 1000 &&(_sSchedTaskMgr.getInstance().getCurrentScheduledTaskInfo(RECENT_MSG_)==null))
    {

    // do something     
    }

}
这也可以通过以下方式完成:

public static final String RECENT_MSG_        = "RecentMessage";
public static final String PACK                       ="com.foo.xxs."
并像这样连接字符串:

if(_taskType == 1000 &&(_sSchedTaskMgr.getInstance().getCurrentScheduledTaskInfo(PACK+RECENT_MSG_)==null))

哪一个更好?

它们将具有相同的性能-串联将在编译时而不是执行时执行,因为两个部分都是常量。诚然,在最初的版本中,常量池中的字符串会更少,但这不太可能有什么不同

你觉得哪一个更可读?我不能说它对我来说有什么意义——我不喜欢第一种形式的重复,但同样地,我也不确定我是否想在任何地方连接起来

另一种选择是:

public static final String PACK               = "com.foo.xxs."
public static final String RECENT_MSG_        = PACK + "RecentMessage";
etc-因此您在常量声明点执行连接。然后,您可以按照第一个代码片段在代码中使用
RECENT\u MSG\uu
,但避免按照第二个代码片段重复使用“com.foo.xxs”


编辑:您可能需要考虑的另一个选项是使用枚举。 它们将具有相同的性能-串联将在编译时而不是执行时执行,因为两部分都是常量。诚然,在最初的版本中,常量池中的字符串会更少,但这不太可能有什么不同

你觉得哪一个更可读?我不能说它对我来说有什么意义——我不喜欢第一种形式的重复,但同样地,我也不确定我是否想在任何地方连接起来

另一种选择是:

public static final String PACK               = "com.foo.xxs."
public static final String RECENT_MSG_        = PACK + "RecentMessage";
etc-因此您在常量声明点执行连接。然后,您可以按照第一个代码片段在代码中使用
RECENT\u MSG\uu
,但避免按照第二个代码片段重复使用“com.foo.xxs”


编辑:您可能需要考虑的另一个选项是使用枚举。 我会选择第一个版本,您只是让读者更容易立即看到字符串的含义以及您引用的类。此外,如果您想从不同的名称空间引入类,您可以这样做

相反,第二个版本引入了一些需要读者首先解释的逻辑


如果您选择第二个版本,请使用Jon的替代方案,这样至少您仍然可以选择从其他名称空间引入类。

我选择第一个版本,您只需让读者更容易立即看到字符串的含义以及您引用的类。此外,如果您想从不同的名称空间引入类,您可以这样做

相反,第二个版本引入了一些需要读者首先解释的逻辑

如果您选择第二个版本,请使用Jon的替代方案,这样至少您仍然可以选择从其他名称空间引入类