解决方案 »

  1.   

    估计原因是sSex的值为null,导致空指针异常。
    sSex为null,但是if(sSex == "男")也是可以编译通过并执行的,只是不会执行到分支里去。
    要比较字符串应该用String.equals方法,==只是指针比较。
      
      

  2.   

    你的首先搞清楚==和equals的区别,==代表的是对象的句柄(类似于指针的概念)相同,也就是存储在堆栈(存储的是对象的句柄而非对象本身,真正的对象时放在堆中)中内容相同,equals比较的是对象的内容;换句话说就是==比较的是堆栈中的内容,equals比较的是堆中的实际值。
    在比较基本数据类型的时候使用==号是没有问题的,因为基本数据类型本身就是存储在堆栈中;但是在比较对象的时候,如果你想比较的是对象的“值”,使用==号的话可能会出现错误,比如你题目中使用sSex == "男",这种方式得到的结果是正确的,因为String虽然不是基本数据类型,但是JAVA进行了封装,允许你直接使用String a="XXX"的方式定义,在更多的时候例如,String s1=new String("abc"); 
    String s2=new String("abc"); 
    if(s1==s2){
        //永远也不会执行到这,s1 和s2不是同一个对象
    }
    在JAVA中在更多的时候,我们使用==比较对象时是代表他们是指向同一个堆栈,而不是比较堆栈指向对象的值相等。
    以上是科普,回到问题,if( sSex.equals(getString(R.string.sexMale))) 正常情况是没有问题的,运行时候报错基本上是你的R.string.sexMale为null值或者sSex为null值。