`

Java函数参数传递(珠海20090326)

阅读更多
1.java的数据类型分两大类:基本类型引用类型.
基本类型有:整数类型,浮点类型,字符类型char (2Byte),布尔类型boolean (1bit).
整数类型又分:字节型byte (1Byte),短整型short (2Byte),整型int (4Byte),长整型long (8Byte).
浮点类型分为:单精度型float (4Byte),双精度型double (8Byte).
引用类型有:字符串String,数组[],类class,接口interface.

2. Java函数参数传递的理解
http://www.cjsdn.net/post/print?bid=1&id=91403
Java函数参数是值传递的。

. 如果参数是基本类型,函数不能改变参数的值。
. 如果参数是对象,函数可以改变参数的属性。
. 如果参数是对象,函数不能使参数指向新的对象。

3.java函数的参数传递都是,总是传值的.对于基本类型就是传值毫无疑问;对于引用类型,也可以说是传值,一个对象的引用,地址相仿的东西.

4.一个例子:
package com.method.test;

class OutClass
{
	String name;
	int number;
	OutClass(String name,int number)
	{
		this.name=name;
		this.number=number;
	}
}

public class TestMethod {

	static public void changeInt(int i)
	{
		i = 9;
	}
	static public void changeFloat(float f)
	{
		f = 99.0f;
	}
	static public void changeString(String s)
	{
		s = "after changed";
	}
	
	static public void newString(String s)
	{
		s = new String("new String");
	}
	static public void changeStringB(StringBuffer sb)
	{
		sb.append("add postfix");
	}
	static public void newStringB(StringBuffer sb)
	{
		sb = new StringBuffer("new StringBuffer");
	}
	static public void changeClass1(OutClass oc)
	{
		oc.name = "hk";
		oc.number = 10000;
	}
	static public void changeClass2(OutClass oc1,OutClass oc2)
	{
		OutClass temp ;
		temp = oc1;
		oc1 = oc2;
		oc2 = temp;
	}
	static public void changeClass3(OutClass oc)
	{
		OutClass temp = new OutClass("BeiJing",10);
		oc = temp;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int originInt = 0;
		float originFloat = 0.0f;
		String cString = "originCString 0";
		String nString = "originNString 0";
		StringBuffer csb = new StringBuffer("originCsb 0");
		StringBuffer nsb = new StringBuffer("originNsb 0");
		OutClass c1 = new OutClass("GZ",20);
		OutClass c2_1 = new OutClass("zq",758);
		OutClass c2_2 = new OutClass("jm",750);
		OutClass c3 = new OutClass("yf",766);
		
		System.out.println("originInt:"+originInt);
		System.out.println("originFloat:"+originFloat);
		System.out.println("cString:"+cString);
		System.out.println("nString:"+nString);
		System.out.println("csb:"+csb);
		System.out.println("nsb:"+nsb);
		System.out.println("c1.name:"+c1.name+";c1.number:"+c1.number);
		System.out.println("c2_1.name:"+c2_1.name+";c2_1.number"+c2_1.number);
		System.out.println("c2_2.name:"+c2_2.name+";c2_2.number"+c2_2.number);
		System.out.println("c3.name:"+c3.name+";c3.number"+c3.number);
		
		System.out.println();
		System.out.println();
		
		changeInt(originInt);
		changeFloat(originFloat);
		changeString(cString);
		newString(nString);
		changeStringB(csb);
		newStringB(nsb);
		changeClass1(c1);
		changeClass2(c2_1,c2_2);
		changeClass3(c3);
		
		System.out.println("originInt:"+originInt);
		System.out.println("originFloat:"+originFloat);
		System.out.println("cString:"+cString);
		System.out.println("nString:"+nString);
		System.out.println("csb:"+csb);
		System.out.println("nsb:"+nsb);
		System.out.println("c1.name:"+c1.name+";c1.number:"+c1.number);
		System.out.println("c2_1.name:"+c2_1.name+";c2_1.number"+c2_1.number);
		System.out.println("c2_2.name:"+c2_2.name+";c2_2.number"+c2_2.number);
		System.out.println("c3.name:"+c3.name+";c3.number"+c3.number);
		
	}

}


结果:
originInt:0
originFloat:0.0
cString:originCString 0
nString:originNString 0
csb:originCsb 0
nsb:originNsb 0
c1.name:GZ;c1.number:20
c2_1.name:zq;c2_1.number758
c2_2.name:jm;c2_2.number750
c3.name:yf;c3.number766


originInt:0
originFloat:0.0
cString:originCString 0
nString:originNString 0
csb:originCsb 0add postfix
nsb:originNsb 0
c1.name:hk;c1.number:10000
c2_1.name:zq;c2_1.number758
c2_2.name:jm;c2_2.number750
c3.name:yf;c3.number766


5.注意以上的String,StringBuffer.特别是String 是对+ ,= ,== ,等符号进行了重载的.

6.基本类型,和类对象的区别.
基本类型的所有相同值变量的值都是程序常量表中的一个引用,如int i = 1;int j =1;
其中的i,j都等于1所以表中同一常量的引用.而String s1 = newString("hello");String s2 = new String("hello");虽然它们的值都相同,但是它们是类对象是没有常量表的,所以不是同一引用.但String类是特别的,程序有个字符串常量表,当String s1 = "hello";或String s2 = new String("hello").intern()时是加入字符串常量表的.
public class TestString {

	public static void main(String[] args) {
		int i,j,k;
		i =5000;
		j=5000;
		k=j;
		System.out.println(i==j);
		System.out.println(k==j);
		System.out.println(i==k);
		String s1 = new String("hello");
		String s2 = new String("hello");
		String s3 = s1;
		System.out.println();
		System.out.println(s1==s2);
		System.out.println(s1==s3);
		System.out.println(s2==s3);
		String ss1 = "hello";
		String ss2 = new String("hello");
		String ss3 = new String("hello").intern();
		System.out.println();
		System.out.println(ss1==ss2);
		System.out.println(ss1==ss3);
		System.out.println(ss2==ss3);
		
	}

}

true
true
true

false
true
false

false
true
false
分享到:
评论

相关推荐

    Java的引用和函数参数传递

    ### Java的引用与函数参数传递详解 #### 一、Java中的引用基础 在Java中,对象的引用扮演着类似于其他编程语言(如C/C++)中指针的角色,但是Java的引用比传统的指针更加安全且易于管理。这是因为Java的设计者们...

    C语言函数参数的传递详解

    ### C语言函数参数传递详解 #### 一、引言 在C语言中,函数是非常重要的概念,它允许我们将代码组织成可重复使用的模块。而函数参数则是传递数据给函数的关键方式之一。根据传递数据的不同方式,可以将参数传递...

    C语言函数参数传递

    "C语言函数参数传递详解" 在本文中,我们将详细探讨C语言函数参数传递的基本知识点,并通过三个考题来帮助读者更好地理解和掌握这方面的知识。 值传递 在C语言中,函数参数传递有三种形式:值传递、地址传递和...

    关于C++的函数参数传递方式

    ### 关于C++的函数参数传递方式 在C++编程中,函数参数的传递是非常重要的一个概念。通过函数参数的传递,我们可以实现不同函数间的数据交互。本文将深入解析C++中的函数参数传递机制,包括传值调用、传地址调用...

    C/C++中多维数组指针作为函数参数传递程序

    C/C++中多维数组指针作为函数参数传递程序 在 C++ 中,多维数组指针作为函数参数传递是非常常见的编程技术。本文将详细介绍如何在 C/C++ 中将多维数组指针作为函数参数传递,並对相关知识点进行详细解释。 多维...

    函数调用参数传递类型(java)的用法介绍..ppt

    函数调用参数传递类型(Java)的用法介绍 本文档主要介绍 Java 中函数调用参数传递类型的用法,通过对 Applet 概述、Applet 应用程序接口、绘图、Swing 基础、Swing 的特点和概念、Swing 组件、其它 Swing 特性等...

    Java-Java函数式编程教程

    Java 8新增了一些预定义的函数式接口,如Function(接受一个参数并产生一个结果)、Predicate(接受一个参数并返回一个布尔值)和Consumer(接受一个参数但不返回值)。 3. **Stream API**: Stream API是Java 8中...

    向setTimeout传递函数参数

    在这个例子中,我们使用箭头函数确保`sayHello`方法的`this`指向`obj`对象,然后传递参数`'Jane'`。两秒后,控制台将输出`Hello, John, Jane`。 值得注意的是,`setTimeout`返回一个唯一的ID,可以通过`...

    java传递参数的方法

    java传递参数的方法 很的东西 大家下载学习一下

    C语言函数参数传递过程教学方法研究.pdf

    《C语言函数参数传递过程教学方法研究》这篇文章深入探讨了C语言中函数参数传递的核心概念,旨在解决教学过程中的难点。C语言中的函数调用是一个关键的编程元素,而参数传递则是函数工作的重要机制。文章从变量和...

    C语言中二维数组作为函数参数来传递的三种方法

    C语言中二维数组作为函数参数来传递的三种方法 在C语言中,二维数组作为函数参数来传递是非常常见的操作。但是,如何正确地传递二维数组作为函数参数却是许多初学者和开发者经常混淆的地方。今天,我们将详细介绍...

    C C++语言函数参数传递及函数调用约定的探讨

    ### C/C++语言函数参数传递及函数调用约定的探讨 #### 摘要 本文主要探讨了C/C++语言中函数之间的参数传递机制以及计算机如何处理函数调用中的参数,即函数调用约定。文章重点分析了值传递与地址传递这两种主要的...

    C语言中函数参数传递教学模式探讨.pdf

    标题和描述中提及的文档是关于C语言函数参数传递的教学模式探讨。文档的关键词包括函数参数传递、教学模式、参数传递特点等,这些都是C语言教学中的重要部分。在深入探讨这些主题之前,需要了解C语言基础知识,包括...

    C、C++函数参数传递方式.pdf

    通过指针传递参数,函数可以修改实参的值。在文档示例中,指针传递的实现如下: ```cpp int main(){ void swap(int *p1, int *p2){ int temp = *p1; *p1 = *p2; *p2 = temp; } int i = 3, j = 4; cout , j=" ...

    C语言程序设计中函数参数传递的研究.pdf

    在C语言中,函数参数的传递是程序设计中的核心概念之一。该概念是理解函数如何运作的关键,尤其是参数是如何在函数调用过程中被传递的。在不同的C语言教材中,关于函数参数传递的观点不尽相同。有的认为是“值传递”...

    c# 调用C++编写 的DLL函数各种参数传递问题。

    在 C# 中,将结构体 NET_INFO_STRUCT 的实例传递给这个函数,并使用 ref关键字来传递参数。 5. 传递结构体数组(C++ 来填充) 在 C++ 中,函数原型为 int ReadUimAllBook(UIM_BOOK_STRUCT lpUimBookItem[],int ...

    怎么往SetTimer的回调函数传递参数

    Windows 消息处理机制与 SetTimer 回调函数参数传递 在 Windows 编程中,消息处理机制是了解 Windows 操作系统的关键。Windows 是一种消息驱动的系统,它会将用户的输入、鼠标点击、键盘输入等事件转换为消息,然后...

    《Java函数式编程》_高清华.zip

    在Java中,Lambda表达式常被用作高阶函数的参数,如`Collection.sort()`方法接受一个Comparator(比较器)作为参数,这是一个典型的高阶函数应用。 5. **函数式编程的核心原则**:函数式编程强调纯函数(无副作用)...

    关于C语言中函数调用和参数传递机制的探讨.txt

    2. **传递参数**:将参数传递给被调用的函数。 3. **跳转到被调用函数**:执行`call`指令,跳转到被调用函数的入口地址。 4. **设置局部变量空间**:在栈上为被调用函数分配局部变量空间。 5. **执行被调用函数**:...

    对C语言函数参数传递的探讨——以交换问题为例.pdf

    C语言的函数参数传递是程序设计中的一个重要概念,它直接关系到程序中数据的流动和处理方式。在C语言中,函数调用时的参数传递方式主要分为两种:值传递(Call by Value)和地址传递(Call by Address),也称作传值...

Global site tag (gtag.js) - Google Analytics