The reverse Polish scheme was proposed in 1954 by Burks, Warren, and Wright and was independently reinvented by Friedrich L. Bauer and Edsger W. Dijkstra in the early 1960s to reduce computer memory access and utilize the stack to evaluate expressions.

```
class Solution {
//Use a stack to store every digit numbers.
//Whenever we detect a binary operation (Must be), we pop the top two elements in stack.
//Then calculate and put result back to stack.
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<>();
for(int i = 0; i < tokens.length; i++){
if(tokens[i].equals("+")){
int b = stack.pop();
int a = stack.pop();
stack.push(a+b);
}
else if(tokens[i].equals("-")){
int b = stack.pop();
int a = stack.pop();
stack.push(a-b);
}
else if(tokens[i].equals("*")){
int b = stack.pop();
int a = stack.pop();
stack.push(a*b);
}
else if(tokens[i].equals("/")){
int b = stack.pop();
int a = stack.pop();
stack.push(a/b);
}
else
stack.push(Integer.parseInt(tokens[i]));
}
return stack.pop();
}
}
```