String 哪个更好?将整个内容作为字符串传递,还是字符串串联?
嗨,我有20个字符串,除了类名之外,每个字符串都有相同的包结构。这些字符串需要根据需要传递给方法。请参阅以下代码: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 =
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的替代方案,这样至少您仍然可以选择从其他名称空间引入类