import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param tokens string字符串一维数组 
     * @return int整型
     */
    public int evalRPN (String[] tokens) {
        Stack stack = new Stack<Integer>();
        int left,right;
        // write code here
        for(String s:tokens){
            if(s.equals("+")){
                right = (int)stack.pop();
                left = (int)stack.pop();
                stack.push(left+right);
            }else  if(s.equals("-")){
               right = (int)stack.pop();
                left = (int)stack.pop();
                stack.push(left-right);
            }else  if(s.equals("*")){
                right = (int)stack.pop();
                left = (int)stack.pop();
                stack.push(left*right);
            }else  if(s.equals("/")){
              right = (int)stack.pop();
                left = (int)stack.pop();
                stack.push(left/right);
            }else{
                stack.push(Integer.valueOf(s));
            }
                
        }
        return (int)stack.pop();
    }
}

注意: 1.Stack的pop()返回值是Object,需要转换类型。Object与String可以互相转换,Object中还用toString();其他包装类型与String不可以互相转换,如可以将Integer变为Object,再将Object转为String,直接转换会报错。

 Stack stack = new Stack<Integer>();
 stack.push(4);
 **Integer l = stack.pop();**//出错了,Object与Integer不匹配
 Stack<String> s = new Stack<String>();
 s.push("aaa");
 String a = s.pop();//没错

2.逆波兰表达式即后缀表达式