Java 什么';当比较字符串时,您知道长度始终为1时,它的性能更高?
我有一个从数据库返回的字符串,它的长度总是等于1 这个字符串可能等于“0”、“1”、“Y”、“N”或null,这实际上是数据库中的一个约束,出于日志目的,不允许替换它 考虑到值“Y”或“N”不区分大小写,还有什么更具性能的呢Java 什么';当比较字符串时,您知道长度始终为1时,它的性能更高?,java,string,performance,equals,Java,String,Performance,Equals,我有一个从数据库返回的字符串,它的长度总是等于1 这个字符串可能等于“0”、“1”、“Y”、“N”或null,这实际上是数据库中的一个约束,出于日志目的,不允许替换它 考虑到值“Y”或“N”不区分大小写,还有什么更具性能的呢 public boolean isTrue { return this.str != null && (this.str.equals("1") || this.str.equalsIgnoreCase("S")); } 或 PS:请不要考虑方法
public boolean isTrue {
return this.str != null && (this.str.equals("1") || this.str.equalsIgnoreCase("S"));
}
或
PS:请不要考虑方法、字段和变量的名称。< /P> < P>检查我的信是否在<代码>“01YN”< /代码>中,我会做< /P>
public boolean isTrue {
return this.str != null && ("01YN".indexOf(this.str)>=0);
}
我认为这是一种干净易读的方法。更多信息,您可以为
“01YN”
声明一个常量,然后执行,而不是在此处硬编码。要检查“01YN”
中是否有我的字母,我会执行
public boolean isTrue {
return this.str != null && ("01YN".indexOf(this.str)>=0);
}
我认为这是一种干净易读的方法。更多信息,您可以为“01YN”
声明一个常量,然后执行,而不是在此处硬编码。这可能值得一试:
switch(str == null ? 'x' : str.charAt(0)) {
case '1', 'y', 'Y':
return true;
}
return false;
这可能值得一试:
switch(str == null ? 'x' : str.charAt(0)) {
case '1', 'y', 'Y':
return true;
}
return false;
您也可以使用这个.campocomentariarea.charAt(0);这是您的性能瓶颈吗?“我认为不是——所以不要在意表现上的细微差别。”詹德沃夏克同意。在这里,代码的清晰性应该是最重要的,因为从数据库获取数据所需的时间要比这多出许多数量级。OP正在尝试优化微秒操作。此问题仅用于研究目的。您可以使用以下简单基准来衡量性能:long startTime=System.currentTimeMillis();对于(int i=0;iYou也可以使用此.campocomentariorea.charAt(0);这是您的性能瓶颈吗?我认为不是-所以不要关心性能上的细微差异。@JanDvorak同意。代码清晰性应该是这里的首要任务,因为从数据库获取数据需要比这多几个数量级的时间。OP正在尝试优化微秒操作。这个问题仅用于研究目的操作系统。您可以使用以下简单的基准测试来衡量性能:long startTime=System.currentTimeMillis();for(int i=0;iSlight bug,应该是=0
@ZongZhengLi是的,修复了。答案很好,尽管我们在这里也遇到了几乎相同的疑问,因为我们可以使用公共布尔值isTrue{返回this.str!=null&(“01YN”.indexOf(this.str.charAt(0))>=0);}轻微的错误,应该是>=0
@ZongZhengLi是的。答案很好,尽管我们在这里结束了几乎相同的疑问,因为我们可以做公共布尔isTrue{返回this.str!=null&(“01YN”.indexOf(this.str.charAt(0))>=0);}这是一段不错的代码,但实际上并没有回答有关性能问题的问题。我想您已经知道,使用这种方法比较使用char更具性能。这是一段不错的代码,但实际上并没有回答有关性能问题的问题。我想您已经知道使用char进行比较更具性能使用这种方法。