`
mili_qm
  • 浏览: 6403 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

java中的基本类型传值和类类型传值

    博客分类:
  • java
阅读更多
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 SE...

    java中页面传值的简单操作

    总结一下,Java中通过表单进行页面传值的基本步骤包括: 1. 创建HTML表单,设置`action`指向处理表单数据的Servlet,并用`name`属性标识每个输入字段。 2. 在Servlet中重写`doPost`方法,从`HttpServletRequest`对象...

    java的传值与传值后的改变

    在Java中,有两种基本的数据类型:原始类型(如int, double, char等)和引用类型(如类实例、数组)。它们在函数调用时的传值行为有所不同。 1. **原始类型传值**: 当函数参数为原始类型时,Java会进行值的复制。...

    Java中引用类型传值的代码清单.pdf

    在Java编程语言中,引用类型变量实际上是对象的引用或指针,而非对象本身。当我们讨论“引用类型传值”时,意味着在方法调用时,传递的是对象引用的一个副本,而不是对象本身。以下是对给定代码清单的详细解释: 1....

    引用类型传值方法

    在编程领域,我们经常需要处理各种数据类型,其中包括值类型(value types)和引用类型(reference types)。...在实际开发中,根据需求选择合适的类型和传值方式,可以有效地优化性能和降低错误率。

    JAVA中传值与引用问题

    在Java中,所有的数据类型可以分为两大类:基本类型(如int, double等)和引用类型(如Object, String等)。这两类数据类型的处理方式有所不同: 1. **基本类型**:当传递基本类型时,实际上是传递了该类型的值的...

    Java中GET表单传值分页搜索功能

    在Java Web开发中,GET表单传值是常见的数据传输方式,主要用于页面间的数据传递,尤其是在实现分页搜索功能时尤为常见。这个标题所指的"Java中GET表单传值分页搜索功能"涉及了以下几个核心知识点: 1. **GET请求**...

    JSP中java代码与js之间的传值

    在JavaServer Pages (JSP) 中,我们经常需要在Java代码和JavaScript之间传递数据。这在构建动态网页时尤其重要,因为Java代码通常用于处理服务器端逻辑,而JavaScript则负责客户端交互。这篇博客将探讨如何在JSP中...

    lotus domnio java代理传值

    "lotus domnio java代理传值"这个主题主要涉及如何在Java代码中创建和使用代理,并在代理之间传递参数。 首先,让我们了解一下Lotus Domino Java代理的基本概念。在Lotus Domino Designer中,Java代理是用Java语言...

    java及C++中传值传递、引用传递和指针方式的理解.docx

    ### Java及C++中传值传递、引用传递和指针方式的理解 在程序设计语言中,函数调用时参数的传递方式对理解程序的行为至关重要。本文将深入探讨Java与C++这两种广泛使用的编程语言中参数传递的方式,包括值传递、引用...

    java中get方法传值的乱码问题

    关于java中使用表单get方法传值出现乱码问题的解答。详细简单,便于学习使用。

    Java中参数传值的代码清单.pdf

    Java只支持两种类型的参数传递:基本数据类型(如int、double等)的传值和引用类型(如类对象)的传值。以下是对给定代码清单的详细解释: 1. **基本数据类型传值**: 在Java中,基本数据类型的参数传递是按值传递...

    java中传值还是传引用的的认识

    在 Java 中,传递给函数的参数都是按值传递的,包括基本类型和引用类型。在函数中修改基本类型的参数的值,不影响传到函数中参数,因为函数修改的是复制的内容;在函数中修改类对象的参数的值,会改变其中数据成员的...

    浅谈Java中方法的参数传值.pdf

    Java方法参数传值是Java编程中的基础知识点,涉及变量、数据类型和方法调用的机制。在Java中,数据类型分为基本数据类型和引用数据类型。基本数据类型包括布尔型(boolean)、字节型(byte)、短整型(short)、整型...

    Ajax传值到java的方法中

    但是,Ajax传值到Java方法中的实现却不是那么简单,需要了解Ajax的原理和Java的Web开发机制。 首先,需要了解Ajax的基本原理。Ajax是Asynchronous JavaScript and XML的缩写,通过JavaScript语言来实现页面的异步...

    java中传值与传引用

    在Java编程语言中,函数调用时的参数传递方式有两种:传值(Passing by Value)和传引用(Passing by Reference)。虽然Java官方文档中并未明确指出有传引用这一概念,但在实际操作中,Java的行为类似于传引用,尤其...

    Java是传值还是传址引用

    ### Java是传值还是传址引用 #### 一、简单类型是按值传递的 Java在处理简单数据类型(如int、boolean等)时采用的是按值传递的方式。这意味着当你将一个简单类型的值作为参数传递给一个方法时,实际上传递的是这...

    分析java的传值问题

    通过以上分析可以看出,Java中对于基本类型和引用类型的参数传递方式存在明显的区别: - 对于基本类型,传递的是值的副本,方法内部对参数的修改不会影响到原始变量。 - 对于引用类型,传递的是引用的副本,方法内部...

    页面传值与后台传值

    1. JSP基本语法:学习如何在JSP中创建表单,以及如何使用EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)简化页面逻辑。 2. 请求参数的处理:讲解如何获取HTTP请求中的参数,以及如何...

    Java传值还是引用

    根据标题和描述,我们将深入探讨Java中传值与引用的区别,以及它们在实际编程中的应用。 首先,Java是一种“总是按值传递”的语言。这意味着无论是基本类型还是引用类型,当作为参数传递时,都会有一个副本被创建并...

Global site tag (gtag.js) - Google Analytics