在JSP页面中<%!   String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
   String DBURL = "jdbc:oracle:thin:@localhost:1521:MLDN" ;
   String DBUSER = "scott" ;
   String DBPASSWORD = "tiger" ;
   Connection conn = null ;
%>

========和===========
<%   final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
   final String DBURL = "jdbc:oracle:thin:@localhost:1521:MLDN" ;
   final String DBUSER = "scott" ;
   final String DBPASSWORD = "tiger" ;
   final Connection conn = null ;
%>两种写法是等价的吗?

解决方案 »

  1.   

    等价....
    有final修饰的你就看做一个常量就行了
      

  2.   

    明显不等价,上面的String类的实例的指向是可以改变的,下面的是无法改变的final描述的变量,则变量的值不能够改变
    描述方法则该方法不能被重写
    描述类的话该类就不能被继承
      

  3.   

    实际使用中没什么区别.那要说得严格的话,去看看final关键字的描述就行了..
    不懂java也宵得他们不同
      

  4.   

    String类本身就是final的,所以前面加不加final应该没有区别。另外你的:<%!   String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ; 
      String DBURL = "jdbc:oracle:thin:@localhost:1521:MLDN" ; 
      String DBUSER = "scott" ; 
      String DBPASSWORD = "tiger" ; 
      Connection conn = null ; 
    %> 
    比下面多一个感叹号,有感叹号是全局的,意思就是后面再开个<% %>里面也可以用你的全局定义的变量,而没有感叹号的话则是局部变量,后面再开的<% %>里面不能用前面定义的变量。不知道我说对了没,请指正,谢谢。
      

  5.   

    楼上的我不认同,final绝对是不同的,怎么相同呢,但是具体使用的效果应该没啥差别。
    另外还有那个感叹号,楼上是正确的。
      

  6.   

    补充一下,上面已经有人说过了,类是final是类不可以继承,
    如果你继承String类则不可以,
    但是你在声明变量的时候,这时候是限制他可否改变。所以,这是两码事情。
      

  7.   

    如果楼主不想修改这些变量值的话可以认为是等价的(实际上并不完全等价),一种是变量的引用,一种是常量
    另外,Connection conn = null这个不建议定义成final的,你操作数据库时必然要赋值给conn,如果设成final的话就没法改变了。
      

  8.   

    final Connection conn = null ;
    定义的没有丝毫的意义,你后面还要用到conn,定义成final就不能赋值了。
    有一点疑问:在页面中定义常量,做什么?
    本来都是私有的,别人又用不到,简直是画蛇添足
      

  9.   


    不赞同。
    String对象不可修改是显而易见的,但这里final修饰的目的是DBDRIVER这个变量不能再指向其它对象了
    String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ; 
    final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ; 
      

  10.   

    12楼说提对的.String加上final变量就不能再指向其它的字符串了.意义在此.
      

  11.   

    不同<%!   %>是申明,
    而<%   %>里面的值不保存到下一次刷新中
      

  12.   

    对于STRING类来说是等价的,STRING本身就是定义成FINAL但做为程序代码来理解的话,定义常量的时候,用加上FINAL修饰。
      

  13.   

    final    定义了就不能再改了,也不能加继承,所以为了安全的话一般会定义成final,定义的时候就要赋值
      

  14.   

    不等价啊。。前面声明称了JSP转译成的SERVLET的成员变量,
    第二个是把代码插入到转译成的Servlet的_jspService方法里面了啊,是局部变量啊。
    前者只在你第一请求JSP的时候会初始化,后者请求一次初始化一次。