`
mili_qm
  • 浏览: 6233 次
  • 性别: 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及C++中传值传递、引用传递和指针方式的理解.docx

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

    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中get方法传值的乱码问题

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

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

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

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

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

    JAVA中传值与引用问题

    传值和传引用的问题一直是Java里争论的话题。与C++不同的,Java里面没有指针的概念,Java的设 计者巧妙的对指针的操作进行了管理。事实上,在懂C++的Java程序员眼中,Java到处都是精美绝伦的指 针。

    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是传值还是传址引用

    页面传值与后台传值

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

    简单的网页传值

    网页传值是Web开发中的基本操作,用于在不同的页面间传递数据,使用户的状态得以保持。本主题将深入探讨两种常见的方法:Cookie和Session。理解并掌握这两种技术对于构建动态和交互性强的网站至关重要。 首先,我们...

    Java中的传值与传引用实现过程解析

    在Java中,类类型(如String、Model等)都是传引用的,函数内部对类类型参数的修改会影响原来的参数值。但是,需要注意的是,函数内部对类类型参数的修改只是修改了函数内部的参数的引用,而不是修改了原来的参数值...

    Android NDK底层和java代码相互传值调用(实用经典Demo)

    本教程将深入探讨如何在Android NDK底层和Java代码之间进行数据传递和调用,具体涵盖基本数据类型、字符串以及对象的传递。 1. **Java与C/C++的数据类型映射** 在Java和C/C++之间传递数据时,首先需要了解它们之间...

Global site tag (gtag.js) - Google Analytics