日期:2014-05-20  浏览次数:20679 次

请教JSP问题
在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 ;
%>

两种写法是等价的吗?

------解决方案--------------------
等价....
有final修饰的你就看做一个常量就行了
------解决方案--------------------
一般都是等价的吧
------解决方案--------------------
明显不等价,上面的String类的实例的指向是可以改变的,下面的是无法改变的

final描述的变量,则变量的值不能够改变
描述方法则该方法不能被重写
描述类的话该类就不能被继承
------解决方案--------------------
楼上的我不认同,final绝对是不同的,怎么相同呢,但是具体使用的效果应该没啥差别。
另外还有那个感叹号,楼上是正确的。
------解决方案--------------------
如果楼主不想修改这些变量值的话可以认为是等价的(实际上并不完全等价),一种是变量的引用,一种是常量
另外,Connection conn = null这个不建议定义成final的,你操作数据库时必然要赋值给conn,如果设成final的话就没法改变了。
------解决方案--------------------
final Connection conn = null ;
定义的没有丝毫的意义,你后面还要用到conn,定义成final就不能赋值了。
有一点疑问:在页面中定义常量,做什么?
本来都是私有的,别人又用不到,简直是画蛇添足。。。
------解决方案--------------------
探讨
String类本身就是final的,所以前面加不加final应该没有区别。

------解决方案--------------------
12楼说提对的.String加上final变量就不能再指向其它的字符串了.意义在此.
------解决方案--------------------
对于STRING类来说是等价的,STRING本身就是定义成FINAL

但做为程序代码来理解的话,定义常量的时候,用加上FINAL修饰。
------解决方案--------------------
不等价啊。。前面声明称了JSP转译成的SERVLET的成员变量,
第二个是把代码插入到转译成的Servlet的_jspService方法里面了啊,是局部变量啊。
前者只在你第一请求JSP的时候会初始化,后者请求一次初始化一次。