我是否可以将运算符赋给一个变量,并将该变量用于条件检查?
char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){
/* some code*/
}为什么我不能在条件中使用运算符变量?
发布于 2013-01-19 16:13:49
用任何编程语言编写的代码都需要转换为汇编语言。当这种情况发生时,每个用高级语言编写的代码语句都会被翻译成中级等价的指令/指令集,即JAVA代码将被翻译成汇编语言的机器专用指令。
这里在以下语句中添加操作,
int a = a + 10;可能会转换为
添加A1010;
当我们试图访问变量值时,它可能会被转换为读取指令。
因此,当您尝试在变量中使用'>‘时,
char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){
/* some code*/
}if语句,
if(val2 operator val1) 将转换为无效指令。它将读取'operator‘变量,而不是生成用于比较两个值的等价物。
这显然会导致错误的解释。
因此,这样做是不允许的。
每个编译器(java,gcc等)可能会有不同的行为,但目标是相同的。如果你更多地阅读编译器/编译/执行,你会知道更多。以下是一些链接:
http://www.coderanch.com/t/559258/java/java/java-codes-converted-assembly-JVM
Do programming language compilers first translate to assembly or directly to machine code?
C程序的编译步骤。
http://www.herongyang.com/Computer-History/C-Program-Compilation-and-Execution-Process.html
发布于 2013-01-19 15:48:04
嘿,,这不支持,我想这对我来说是有意义的。
编译器在构建应用程序时读取运算符。它无法知道运算符是什么,因此无法构建我在http://www.daniweb.com/software-development/csharp/threads/266385/c-using-operator-as-a-variable-in-calculations中找到的正确的
他们是在谈论C#,但我觉得同样的事情在这里也是有意义的。
您不能直接这样做,但有一些解决方法:
http://www.coderanch.com/t/568212/java/java/arithmetic-operations-operator-stored-variables
如果真的需要,我们必须在代码中使用eval之类的东西。我刚刚尝试了这个示例代码。
package dumb;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class OperatorAsVariable
{
public static void main( String args[] ) throws ScriptException
{
String test = "+";
System.out.println( 1 + test + 2 );
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName( "js" );
System.out.println( engine.eval( 1 + test + 2 ) );
}
}发布于 2013-01-19 16:07:23
Java中的方法参数必须是表达式。运算符不是表达式。这在Java中是不可能的。
更好的方法是传递表示这些运算符的对象(枚举
示例:
public enum Operator{
GREATHERTHAN(">") {
@Override public double apply(double x1, double x2) {
return x1 > x2;
}
},LEESTHAN{
@Override public double apply(double x1, double x2) {
return x1 < x2;
}
}
}https://stackoverflow.com/questions/14412252
复制相似问题