贴上一段代码public class TestConversation {
public static void main(String[] args) {
Object obj=new Integer(5);
if(obj instanceof String){
String strt=(String)objpri;}//
/*if(objpri instanceof String)
String strt=(String)objpri;*///为什么这样,编译就会报错,只是少了一个括号而已

}}如题,知识一个简单的逻辑判断,程序本身没有什么。但是不加大括号,编译器提示有错。

解决方案 »

  1.   

    一般情况下instanceof是检查左边的被测试对象是不是右边类或接口的实例化。如果被测对象是null值,则测试结果总是false。
    你先要进行判断,再转换才是正确的。
      

  2.   

    因为编译器知道Integer一定不是String,如果具有父子关系的就不报错。具体可以看标准。
      

  3.   

    String strt = null;

    if(obj instanceof String)
    strt=(String)obj;
    ----------------------劝你还是加上{}这样以后你自己,或别人看代码时都舒心~
      

  4.   

    和intenseof没有任何关系和变量定义有关系--------------if(1>0)
      int a = 1;//报错if(1>0)
      System.out.println("代码要有一定的规范");//没有问题
      

  5.   

    我的理解:
    1  和intenseof没有任何关系.
    2   String strt==(String)objpri; 是在一个局部范围定义了一个变量 Strt. 编译程序要求它有明确的作用域.
    事实上,按楼主的意思其作用域就是在if语句判断为真时,执行的这一条语句. 执行完之后,就失去作用了. 所以要加一对括号,指定其明确的作用域. 
    而你不加, 编译程序无法准确判定其作用域. 所以报错.
      

  6.   

    各位童鞋,String strt=(String)objpri;这句是紧跟在if条件语句之后的,他这个局部变量的作用域有什么不清楚的,我不加大括号就是 在紧跟着if语句之后的那条语句中有效。可能编译器就是这么设计的吧。
    后来自己又敲了若干类似的代码,发现一个变量如果先声明了,那么在石油的时候就不必放在大括号内部了(针对本程序来说的)。如果没有事先声明,那么就要在大括号里面同时声明使用它。
      

  7.   

    public class TestConversation {
    第一楼的程序若干变量名有错,改了下:public static void main(String[] args) {
    Object obj=new Integer(5);
    if(obj instanceof String){
    String str=(String)obj;}//
    /*if(obj instanceof String)
    String str=(String)obj;*///为什么这样,编译就会报错,只是少了一个括号而已}}
      

  8.   

    if语句是带有语句块的,虽然后面只有一句代码,但还是存在一个语句块,只是省略的{}而你String strt=(String)objpri;是有声明一个String类型的变量,它必须在一个语句块作用域之内。大小{}不可省略.
      

  9.   


    public class TestConv {
    public static void main(String[] args) {
    Object obj=new Integer(5);
    if(obj instanceof String) {
    String strt=(String)obj;
    }
    }}LS说的不错学习了!!
    当语句块中只有一条声明语句时,需要大括号指明作用域