Java 如果,否则如果,否则
假设我有两个字符串可以作为参数传递:Java 如果,否则如果,否则,java,Java,假设我有两个字符串可以作为参数传递: String one = "one"; String two = "two"; 以下哪种方法最有效 private void exampleOne(String example){ if(example.equals("one"){ // do this }else{ // do this } } private void exampleTwo(String example){
String one = "one";
String two = "two";
以下哪种方法最有效
private void exampleOne(String example){
if(example.equals("one"){
// do this
}else{
// do this
}
}
private void exampleTwo(String example){
if(example.equals("one"){
//do this
}else if(example.equals("two"){
// do this
}
}
private void exampleThree(String example){
if(example.equals("one"){
// do this
}
if(example.equals("two"){
// do this
}
}
从统计学上讲,使字符串比较最少的一个,即
if (example.equals("one"){
// do this
} else {
// do this
}
第一个一个。因为你不必检查其他情况。换句话说,你需要做更多的操作 效率最高的:1、2、3 但是,如果您必须检查
i==0
,您会期望其中大多数都是=
如果(i!=0){}否则{}比if(i==0){…}
让一切尽可能简单我会说第一个,只是因为它每次只需要计算一个表达式…我会说第一个,因为如果它只说没有条件的else,那么它就不需要检查任何东西,直接进入“else”我会比较各种方法的效率,如果它们具有相同的功能。目前,这三种方法在功能上都有所不同。因此,没有必要对它们进行比较
exampleOne()
-如果example等于“one”
,则执行。对所有其他值执行else
exampleTwo()
-如果example等于“一”
,则执行If
。如果,则执行,如果它等于“两个”
,否则对于所有其他值,不执行任何操作-(这里有一个区别)
exampletree()
-好吧,这一个(目前的情况)与第一个大致相同,只是有一个额外的比较,顺便说一句,就效率而言,这不会有多大影响。但是,有可能两个if
语句都会在此方法中执行,如果在两个if
语句之间,您将字符串“两个”
分配给示例
,这在示例一
方法中是不可能的。更清楚地说,这里有两个独立的if
块,而在第一个方法中,它是if-else
块(只执行其中一个)在我看来,第二个,因为你可以直接控制这两种情况。当Sring为“一”和“二”时
在示例一中,该方法不关心是否传递了“2”或“3”。它只关心情况,如果“一”通过了< p>没有一个是最有效率的,因为你只有两个选项,你应该考虑这个值不是一个而不是两个,也许另一个(空?null),所以你应该写下这样的东西:
if(example.equals("one"){
//do this 1
}else if(example.equals("two"){
// do this 2
}else{
// do this 3
}
理论上,第一种方法最有效。 实际上,您应该选择第二种,因为它提供了更好的可读性和可维护性 记住,过早优化是万恶之源:)1)效率最高,但这不利于可维护性
private void exampleOne(String example){
if(example.equals("one"){
// do this
}else{
// do this
}
}
private void exampleTwo(String example){
if(example.equals("one"){
//do this
}else if(example.equals("two"){
// do this
}
}
2) 第二,效率高,但有利于可维护性
private void exampleOne(String example){
if(example.equals("one"){
// do this
}else{
// do this
}
}
private void exampleTwo(String example){
if(example.equals("one"){
//do this
}else if(example.equals("two"){
// do this
}
}
3) 第三效率
private void exampleThree(String example){
if(example.equals("one"){
// do this
}
if(example.equals("two"){
// do this
}
}
这些集团无法进行比较,你也无法说明它们中最好的是什么,因为它们在每种情况下的流动是不同的 这个集团提供了两条途径,一条是积极的,另一条不是
private void exampleOne(String example){
if("one".equals(example){ //deciosn
// path positive
}else{
// path negative
}
}
此块提供三条路径:正、负、正、负
private void exampleTwo(String example){
if("one".equals(example){
//path positive
}else {
// path negative
if("two".equals(example{
// path negative-positive
}
}
}
此块提供四条路径:正、负和正-负
private void exampleThree(String example){
if("pne".equals(example){
// path positive
}
if("two".equals(example){
// path positive
}
}
正如您看到的,您有四段不同的代码,您不应该将它们与更高效的代码进行比较
private void exampleThree(String example){
if(example.equals("one"){
// do this
}
if(example.equals("two"){
// do this
}
}
你应该关注背后的算法,而不是它的外观
提示:
尝试在比较的左侧使用常量,这样可以避免诸如取消引用和无效赋值之类的问题 我不知道你需要什么,所以,这里你有我的意见 第一个,总是只做一次检查。。因此,在这个特定的例子中,它将是一个比较少的例子 第二个,最坏情况下会做两个比较,一个是“一”,一个是“两”,但是。。。(总是有a,但是)如果字符串为,则不会有任何作业,比如说“三”(在第一个示例中,它将转到else) 3个示例将始终进行2次比较,如果在ifs中输入返回值,则不进行比较 所以,我的观点是,没有足够的信息来说明哪一个更为理想 一句忠告:你可以试试,如果。。。要使用像这样的案例:
switch (true) {
case example.equals("one"):
break;
case example.equals("two"):
break;
default:
break;
}
显然,与参数的可能值相比,第一种方法将是最有效的方法,因为其他方法中的附加if条件是无用的,并且与您的情况无关。(额外条件检查==>效率较低)为什么不尝试在每个方法的开头和结尾添加System.currentTimeInMillis(),并调用它一百万次呢PElse if几乎总是更高效。一旦你找到一根火柴,你就会输掉剩下的。但不管怎样,每个IF都将进行处理。给定的实现在结果方面是不同的,所以这不是效率的问题。该代码示例与其他代码示例不同,这里没有可能的答案。不,代码不同,但规范说明了两个可能的字符串。我不同意第3点。看起来不一样,但事实并非如此。在1中有两条逻辑路径,在3中有四条。@Vash这就是为什么我说大致相同,但不完全相同。我已经在第3点的最后一句中解释了差异。为什么b)比c)更有效?在汇编程序中,2)需要比3)多跳一次,如果我没记错我的汇编时间……3)如果示例为“1”,则调用两个字符串#equals,而2)调用一个。