首页编程java编程java为什么都叫传值?Java参数传递是传值还是传引用

java为什么都叫传值?Java参数传递是传值还是传引用

编程之家2023-10-1296次浏览

大家好,如果您还对java为什么都叫传值不太了解,没有关系,今天就由本站为大家分享java为什么都叫传值的知识,包括Java参数传递是传值还是传引用的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

java为什么都叫传值?Java参数传递是传值还是传引用

怎样java中传值给页面

从 servlet转到 jsp不外乎两种方法,重定向和 url转发

1、重定向( Redirect):是路径的跳转,内容和 url都改变。不允许带 request参数( session参数可以),即不允许在 servlet里给 request对象使用setAttribute方法传给下一页面。在 servlet里使用 response.sendRedirect(url)方法。注意这里的 url前不带斜线/,如 response.sendRedirect(”test.jsp“)

java为什么都叫传值?Java参数传递是传值还是传引用

2、url转发( Forward):是页面的跳转,页面内容发生改变,url不变。可以带 request和 session参数。在 servlet里使用 getServletConfig().getServletContext().getRequestDispatcher(url).forward(request, response)。而这里的 url前需要带斜线/,如getServletConfig().getServletContext().getRequestDispatcher(”/test.jsp“).forward(request, response)

java为什么都叫传值?Java参数传递是传值还是传引用

servlet使用RequestDispatcher到jsp页面

String url="/EShop.jsp";

ServletContext sc= getServletContext();

RequestDispatcher rd= sc.getRequestDispatcher(url);

rd.forward(req, res);

servlet重定向jsp,并将数据发送到别一个JSP中:

request.setAttubute("messages",aaa);

RequestDispatcher requestDispatcher=request.getRequestDispatcher("/jsp/testbean.jsp");

requestDispatcher.forward(request,response);

3.7、Servlet跳转

从JSP跳转到Servlet可以实现,通过表单提交或超链接可以做到,但是现在如果从一个Servlet跳转到JSP呢?

• HttpServletResponse对象,此对象可以完成跳转:public void sendRedirect();

JumpServlet.java:

package org.lxh.demo;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

public class JumpServlet extends HttpServlet{

public void init() throws ServletException{

}

public void doGet(HttpServletRequest req,HttpServletResponse resp)

throws ServletException,java.io.IOException{

resp.sendRedirect("jump.jsp");

}

public void doPost(HttpServletRequest req,HttpServletResponse resp)

throws ServletException,java.io.IOException{

this.doGet(req,resp);

}

public void destroy(){

}

};

web.xml:

<servlet>

<servlet-name>jump</servlet-name>

<servlet-class>org.lxh.demo.JumpServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>jump</servlet-name>

<url-pattern>/jump</url-pattern>

</servlet-mapping>

以上实现了跳转的功能,但是跳转之后,发现地址栏已经改变了,所以此跳转称为客户端跳转。如果此时假设一个Servlet要向JSP中传递属性,那么应该使用session范围。

JumpServlet.java:

public void doGet(HttpServletRequest req,HttpServletResponse resp)

throws ServletException,java.io.IOException{

request.getSession().setAttribute("name","hello");

resp.sendRedirect("jump.jsp");

}

jump.jsp:

<h1><%=session.getAttribute("name")%></h1>

此时,发现可以通过session属性范围传递内容,但是如果现在传递的内容很多,而程序中使用session范围的话则肯定会带来额外的性能降低,但是此时,这些值只使用一次显示,那肯定没有必要使用session对象,最好使用request范围。如果request属性范围也有一个限制,必须是服务器端跳转,在JSP中使用<jsp:forward>语句完成,但是在servlet中呢?就只能使用RequestDsipatcher接口完成,实际上<jsp:forward>语句也是使用包装了此种应用,既然RequestDispatcher是一个接口,所以必须通过其他方式实例化,通过request对象完成。

JumpServlet.java:

public void doGet(HttpServletRequest req,HttpServletResponse resp)

throws ServletException,java.io.IOException{

req.setAttribute("name","hello");

//准备跳转到此页面

RequestDispatcher rd= req.getRequestDispatcher("jump.jsp");

//把所有的请求向下继续传递

rd.forward(req,resp);

}

注意:

当需要传递request属性范围的时候才使用服务器端跳转。如果不需要传递,则可以选择任意的跳转方式。

但是一般情况下都使用RequestDispatcher进行跳转,而且一定要记住的时候,跳转之后页面地址不会有任何的变化。

如何区分Java中的值传递和引用传递(急)

值传递(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

Java中的形参和实参的区别以及传值调用和传

1.形参:用来接收调用该方法时传递的参数。只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间。因此仅仅在方法内有效。

2.实参:传递给被调用方法的值,预先创建并赋予确定值。

3.传值调用:传值调用中传递的参数为基本数据类型,参数视为形参。

4.传引用调用:传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用的过程中,将实参的地址传递给了形参,形参上的改变都发生在实参上。

案例分析:

1.基础数据类型(传值调用)

传值,方法不会改变实参的值。

2.引用数据类型(引用调用)

传引用,方法体内改变形参引用,不会改变实参的引用,但有可能改变实参对象的属性值。

举两个例子:

(1)方法体内改变形参引用,但不会改变实参引用,实参值不变。

publicclassTestFun2{

publicstaticvoidtestStr(Stringstr){

str="hello";//型参指向字符串“hello”

}

publicstaticvoidmain(String[]args){

Strings="1";

TestFun2.testStr(s);

System.out.println("s="+s);//实参s引用没变,值也不变

}

}

执行结果打印:s=1

(2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。

publicclassTestFun4{

publicstaticvoidtestStringBuffer(StringBuffersb){

sb.append("java");//改变了实参的内容

}

publicstaticvoidmain(String[]args){

StringBuffersb=newStringBuffer("my");

newTestFun4().testStringBuffer(sb);

System.out.println("sb="+sb.toString());//内容变化了

}

}

执行结果,打印:sb=my java。

所以比较参数是String和StringBuffer的两个例子就会理解什么是“改变实参对象内容”了。

1.java的基本数据类型是传值调用,对象引用类型是传引用。

2.当传值调用时,改变的是形参的值,并没有改变实参的值,实参的值可以传递给形参,但是,这个传递是单向的,形参不能传递回实参。

3.当引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的引用,但是如果改变了对象的内容,就会改变实参对象的内容。

Java参数传递是传值还是传引用

您好:

Java中参数的传递方式有两种:传值和传引用。按值传递(call by value)表示方法接受的是调用者提供的值;按引用调用(call by reference)表示方法接受的是调用者提供的变量地址。

传值,参数为基本类型时,是采用传值的方式,示例如下:

传引用,一般参数为对象类型,示例如下:

以上,希望对你有帮助!

好了,关于java为什么都叫传值和Java参数传递是传值还是传引用的问题到这里结束啦,希望可以解决您的问题哈!

java 是什么通俗解释?JAVA到底是什么 怎么用 用最通俗的话解释java cs模式是什么,java实现cs和bs时根本区别在哪里