JAVA的参数传递
Java中对于对象类型的参数和基本类型的参数,Java虚拟机JVM采用了不同的处理方式;
对于基本参数类型,采用的传值策略是将参数的值复制一份再传给方法,方法可以改变参数的复件,但是不会影响参数的原件;
对于对象类型,是将“参数的引用”复制一份再传给方法,在方法中可以把复件指向另一个对象,方法外原件指向还是原来的对象;但是在方法中修改引用对象的内容,原件指向的对象也会更改,因为它们指向的是同一个对象;
package test;
public class PassParamter {
public void methodA(StringBuffer str)
{
str.append("efg");
}
public void methodA(String str)
{
str.replace('a', '*');
}
public void methodB(String str)
{
str="hello";
}
public void methodC(char c)
{
c='*';
}
public void methodD(char[] a)
{
a[0]='*';
}
public static void main(String[] argv)
{
PassParamter test=new PassParamter();
StringBuffer strbuffer=new StringBuffer("abcd");
System.out.println("调用methodA方法之前,strbuffer:"+strbuffer);
test.methodA(strbuffer);
System.out.println("调用methodA方法之后,strbuffer:"+strbuffer);
String str="abcde";
System.out.println("调用methodA方法之前,str:"+str);
test.methodA(str);
System.out.println("调用methodA方法之后,str:"+str);
System.out.println("调用methodB方法之前,str:"+str);
test.methodB(str);
System.out.println("调用methodB方法之后,str:"+str);
char ch='a';
System.out.println("调用methodC方法之前,字符ch:"+ch);
test.methodC(ch);
System.out.println("调用methodC方法之后,字符ch:"+ch);
char c[]={'a','b'};
System.out.println("调用methodD方法之前,数组c[0]:"+c[0]);
test.methodD(c);
System.out.println("调用methodD方法之后,数组c[0]:"+c[0]);
}
}
结果如下:
调用methodA方法之前,strbuffer:abcd
调用methodA方法之后,strbuffer:abcdefg
调用methodA方法之前,str:abcde
调用methodA方法之后,str:abcde
调用methodB方法之前,str:abcde
调用methodB方法之后,str:abcde
调用methodC方法之前,字符ch:a
调用methodC方法之后,字符ch:a
调用methodD方法之前,数组c[0]:a
调用methodD方法之后,数组c[0]:*
String类比较特殊,它在内部是把字符串以常量数组存储的,即用了final修饰符,是不可变的;
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
而replace方式是重新定义了一个String对象,所以对方法外的原件无影响;
public String replace(char oldChar, char newChar) {
if (oldChar != newChar) {
int len = value.length;
int i = -1;
char[] val = value; /* avoid getfield opcode */
while (++i < len) {
if (val[i] == oldChar) {
break;
}
}
if (i < len) {
char buf[] = new char[len];
for (int j = 0; j < i; j++) {
buf[j] = val[j];
}
while (i < len) {
char c = val[i];
buf[i] = (c == oldChar) ? newChar : c;
i++;
}
return new String(buf, true);
}
}
return this;
}
分享到:
相关推荐
Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE...
总结一下,Java中通过表单进行页面传值的基本步骤包括: 1. 创建HTML表单,设置`action`指向处理表单数据的Servlet,并用`name`属性标识每个输入字段。 2. 在Servlet中重写`doPost`方法,从`HttpServletRequest`对象...
在Java中,有两种基本的数据类型:原始类型(如int, double, char等)和引用类型(如类实例、数组)。它们在函数调用时的传值行为有所不同。 1. **原始类型传值**: 当函数参数为原始类型时,Java会进行值的复制。...
在Java编程语言中,引用类型变量实际上是对象的引用或指针,而非对象本身。当我们讨论“引用类型传值”时,意味着在方法调用时,传递的是对象引用的一个副本,而不是对象本身。以下是对给定代码清单的详细解释: 1....
在编程领域,我们经常需要处理各种数据类型,其中包括值类型(value types)和引用类型(reference types)。...在实际开发中,根据需求选择合适的类型和传值方式,可以有效地优化性能和降低错误率。
在Java中,所有的数据类型可以分为两大类:基本类型(如int, double等)和引用类型(如Object, String等)。这两类数据类型的处理方式有所不同: 1. **基本类型**:当传递基本类型时,实际上是传递了该类型的值的...
在Java Web开发中,GET表单传值是常见的数据传输方式,主要用于页面间的数据传递,尤其是在实现分页搜索功能时尤为常见。这个标题所指的"Java中GET表单传值分页搜索功能"涉及了以下几个核心知识点: 1. **GET请求**...
在JavaServer Pages (JSP) 中,我们经常需要在Java代码和JavaScript之间传递数据。这在构建动态网页时尤其重要,因为Java代码通常用于处理服务器端逻辑,而JavaScript则负责客户端交互。这篇博客将探讨如何在JSP中...
"lotus domnio java代理传值"这个主题主要涉及如何在Java代码中创建和使用代理,并在代理之间传递参数。 首先,让我们了解一下Lotus Domino Java代理的基本概念。在Lotus Domino Designer中,Java代理是用Java语言...
### Java及C++中传值传递、引用传递和指针方式的理解 在程序设计语言中,函数调用时参数的传递方式对理解程序的行为至关重要。本文将深入探讨Java与C++这两种广泛使用的编程语言中参数传递的方式,包括值传递、引用...
关于java中使用表单get方法传值出现乱码问题的解答。详细简单,便于学习使用。
Java只支持两种类型的参数传递:基本数据类型(如int、double等)的传值和引用类型(如类对象)的传值。以下是对给定代码清单的详细解释: 1. **基本数据类型传值**: 在Java中,基本数据类型的参数传递是按值传递...
在 Java 中,传递给函数的参数都是按值传递的,包括基本类型和引用类型。在函数中修改基本类型的参数的值,不影响传到函数中参数,因为函数修改的是复制的内容;在函数中修改类对象的参数的值,会改变其中数据成员的...
Java方法参数传值是Java编程中的基础知识点,涉及变量、数据类型和方法调用的机制。在Java中,数据类型分为基本数据类型和引用数据类型。基本数据类型包括布尔型(boolean)、字节型(byte)、短整型(short)、整型...
但是,Ajax传值到Java方法中的实现却不是那么简单,需要了解Ajax的原理和Java的Web开发机制。 首先,需要了解Ajax的基本原理。Ajax是Asynchronous JavaScript and XML的缩写,通过JavaScript语言来实现页面的异步...
在Java编程语言中,函数调用时的参数传递方式有两种:传值(Passing by Value)和传引用(Passing by Reference)。虽然Java官方文档中并未明确指出有传引用这一概念,但在实际操作中,Java的行为类似于传引用,尤其...
### Java是传值还是传址引用 #### 一、简单类型是按值传递的 Java在处理简单数据类型(如int、boolean等)时采用的是按值传递的方式。这意味着当你将一个简单类型的值作为参数传递给一个方法时,实际上传递的是这...
通过以上分析可以看出,Java中对于基本类型和引用类型的参数传递方式存在明显的区别: - 对于基本类型,传递的是值的副本,方法内部对参数的修改不会影响到原始变量。 - 对于引用类型,传递的是引用的副本,方法内部...
1. JSP基本语法:学习如何在JSP中创建表单,以及如何使用EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)简化页面逻辑。 2. 请求参数的处理:讲解如何获取HTTP请求中的参数,以及如何...
根据标题和描述,我们将深入探讨Java中传值与引用的区别,以及它们在实际编程中的应用。 首先,Java是一种“总是按值传递”的语言。这意味着无论是基本类型还是引用类型,当作为参数传递时,都会有一个副本被创建并...