导航:首页 > 编程语言 > java传递类型参数

java传递类型参数

发布时间:2023-11-13 05:53:26

java 参数传递 规则

简言之:Java都是值传递(pass-by-value)

在Java中,无非就是两种类型,即基本类型和从Object继承下来的对象类型,而对象类型又包括String这种一旦初始化就不可改变内容的类型和BufferString这种可以初始化后可

以改变内容的类型。

然后看一下代码示例:

java 代码
1.package test;
2.
3.public class Test {
1. public static void main(String args[]) {
2. Integer interger1, interger2;
3. int i, j;
4. interger1 = new Integer(10);
5. interger2 = new Integer(50);
6. i = 5;
7. j = 9;
8. System.out.println("Before Swap, Interger1 is " + interger1);
9. System.out.println("Before Swap, Interger2 is " + interger2);
10. swap(interger1, interger2);
11. System.out.println("After Swap Interger1 is " + interger1);
12. System.out.println("After Swap Interger2 is " + interger2);
13. System.out.println("Before Swap i is " + i);
14. System.out.println("Before Swap j is " + j);
15. swap(i, j);
16. System.out.println("After Swap i is " + i);
17. System.out.println("After Swap j is " + j);
18.
19. StringBuffer sb = new StringBuffer("I am StringBuffer");
20. System.out.println("Before change, sb is <" + sb + ">");
21. change(sb);
22. System.out.println("After change sb is <" + sb + ">");
23. }
24.
25. public static void swap(Integer ia, Integer ib) {
26. Integer temp = ia;
27. ia = ib;
28. ib = temp;
29. }
30.
31. public static void swap(int li, int lj) {
32. int temp = li;
33. li = lj;
34. lj = temp;
35. }
36.
37. public static void change(StringBuffer ia) {
38. ia.append(", but my content can be changed");
39. //ia = new StringBuffer(",but my content can be changed");
40. }
41.}
42.
输出:

Before Swap, Interger1 is 10
Before Swap, Interger2 is 50
After Swap Interger1 is 10
After Swap Interger2 is 50
Before Swap i is 5
Before Swap j is 9
After Swap i is 5
After Swap j is 9
Before change, sb is <I am StringBuffer>
After change sb is <I am StringBuffer, but my content can be changed>

这很好解释,对于基本类型诸如int,传递进去的是存放int值的“内存单元”的一个,所以函数swap里面的int和外面的int根本就不是一个东西,当然不能反射出去影响外面

的int。而对于对象类型,我们同样可以这样认为,传递进去的是存放对象类型的指针的“内存单元”一个(虽然Java里面没有指针的概念,但这并不妨碍我们理解)。这样,

在swap函数里面,对其指针本身的值做任何操作当然不会影响外面的Integer,因为interger1和interger2的“内存单元”里面的值是不变的,其指向的对象类型也是没有变的。

然后这里需要说明一个问题,就是StringBuffer这种类型的对象了。因为其内容是可以改变的,所以change函数里面的“指针”通过类似“*”的操作,改变了StringBuffer对象的

本身,就显而易见了。(StringBuffer对象本身只有一个副本)

Ⅱ java string 类型 作为参数是什么传递

如果你认为arrayPassTest 函数中,s是作为值传递,而ss是作为引用传递,所以有这样的输出结果,也不算错误,但是决对没有真正理解里面的原因。在这里,String 类型的传递是引用传递,也即是地址传递。这个是毋庸置疑的。因为在java里,String是对象类型,作为参数肯定是引用传递。之所以有值传递的效果,是因为Stirng内部实现时,是用char[] 来存储字符串的,所以String相当于char[]的包装类,那java中,包装类的一个特质就是值操作时体现对应的基本类型的特质。

Ⅲ java 中怎样实现类类型作为参数传递

直接把参数类型定义为对应的类,就是类类型。

1、定一个类

publicclassA{//定义一个类A
}

2、定一个方法,类A作为参数传递

publicclassB{//定义一个类B
publicvoidshow(Aa){//类作为参数传递
}
}

Ⅳ java方法参数怎么引用传递boolean

Java中的参数传递:分为值传递和引用传递
但本质上,Java中只有值传递。引用传递,其实可以理解为传的是类似指针的东西。
值传递就是把基本变量的值拷贝一份,传递这个拷贝。引用传递则是传递的引用的地址,也就是该变量在内存空间的地址。

1.值传递

只有基本数据类型采用值传递,特点是传递的是值的拷贝,传递完后两者就没有关系了。也就是说方法内和方法外的值互不相干

基本数据类型:
·整型:int,long,byte,short
浮点型:float,double
字符型:char
布尔型:boolean
注:8种基本数据类型以外的数据类型都为引用类型。

2.引用传递

指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。
传递的是一个拷贝,即副本。也就是说,对于一个参数传递,存在两个地址指向同一个内存空间。这里我们可以用内存分配示意图来体现

3.String类型传递

先说结论,String类型传递与基本数据类型的传递效果相似。
说明:
String类对象一旦创建,其内容不可更改:
String类的所有方法都不会改变String类对象内容,要改变String类对象的值就必须创建一个新的String对象。
也就是说,当进行参数传递时,如果方法内对String类对象的值进行了修改,那么实际上是创建了一个新的String类对象,然后让原来的变量指向它而已。但是这个“原来的变量”是一份拷贝副本,只是一开始创建的时候与主方法中的传递的值相同而已,现在改变之后,两者就毫无关系了。

Ⅳ java 参数传递问题

这是java方法参数传递的机制
前面那个图传递的是值的副本,无论在方法内部怎么变换,改变的只是它的副本,而它本身在main方法中并没有发生任何变化。所以不会交换。
而数组,参数传递的是引用的副本。就是说栈里存放的是一个引用,这个引用指向堆里的数组数据。而方法传递就传递这个引用的副本,这个副本一样指向堆里的数组的数据。
在方法中按照引用的副本查找到数组并把它的数据交换了,直接对堆中的数据做了变化。所以出了这个方法,在原引用指向的堆内的数据已经发生了变化。

Ⅵ java中 数组可以作为形式参数传递到调用的方法中吗要怎么操作

可以,操作代码如下:

public class ArrTest{

public static void doTest(String[] args){

for(int i=0;i<args.length;i++){

System.out.println(args[i]);

}

}

public static void main(String[] args){

String[] testArr = {"a","b","c","d"};

ArrTest.doTest(testArr );

}

}

(6)java传递类型参数扩展阅读:

把数组作为参数传入一个方法,在该方法中对数组进行一些操作:如果仅仅是插入数据项等一般操作,那么该操作会影响到数组本身;反之,如调整数组大小、对数组赋值等操作,则对数组本身没有影响。

例子:

public class Tester {<br data-filtered="filtered">

public static void counter(int count) {<br data-filtered="filtered">

count = 2;<br data-filtered="filtered">

}<br data-filtered="filtered">

<br data-filtered="filtered">

public static void changeA1(int[] ints) {<br data-filtered="filtered">

int[] temp = { 4, 5, 6 };<br data-filtered="filtered">

ints = temp;<br data-filtered="filtered">

}<br data-filtered="filtered">

<br data-filtered="filtered">

public static void changeA2(int[] ints) {<br data-filtered="filtered">

ints[0] = 4;<br data-filtered="filtered">

ints[1] = 5;<br data-filtered="filtered">

ints[2] = 6;<br data-filtered="filtered">

}<br data-filtered="filtered">

<br data-filtered="filtered">

public static void main(String[] args) {<br data-filtered="filtered">

// Output: 1<br data-filtered="filtered">

// 基本数据类型没有改变。<br data-filtered="filtered">

int count = 1;<br data-filtered="filtered">

counter(count);<br data-filtered="filtered">

System.out.println("count: " + count);<br data-filtered="filtered">

<br data-filtered="filtered">

<br data-filtered="filtered">

int[] ints = { 1, 2, 3 };<br data-filtered="filtered">

<br data-filtered="filtered">

// Output: 1, 2, 3<br data-filtered="filtered">

// 对数组赋值,不会改变原始数组。<br data-filtered="filtered">

changeA1(ints);<br data-filtered="filtered">

for (int i = 0; i < ints.length; i++) {<br data-filtered="filtered">

System.out.print(ints[i] + " ");<br data-filtered="filtered">

}<br data-filtered="filtered">

<br data-filtered="filtered">

// Output: 4, 5, 6<br data-filtered="filtered">

// 可以对数组插入新的数据项。<br data-filtered="filtered">

System.out.println();<br data-filtered="filtered">

changeA2(ints);<br data-filtered="filtered">

for (int i = 0; i < ints.length; i++) {<br data-filtered="filtered">

System.out.print(ints[i] + " ");<br data-filtered="filtered">

}<br data-filtered="filtered">

}<br data-filtered="filtered">

}

Ⅶ java 需要传递类对象为参数的时候,几种方法

下面给你举例3种方法:

1、直接抽象类

对象 = new 抽象类()

{

//重写此抽象类的抽象方法

};

2、抽象类

对象 = new 子类();

接口/实现类 对象= new 实现类()

class 子类 extends 抽象类{

//实现此抽象类的抽象方法即可。

}

class 实现类 implements 接口{

//实现此接口的抽象方法即可

}

3、直接把对象创建出来,比如在参数中需要用到某个类对象的时候,除了上述方法以外,也可以直接把此对象创建出来。

public void method(class obiect,,);

()中就可以这么写

(new (抽象类/接口(){

//在这实现抽象方法

}))

Ⅷ 在java中传递参数的方法有几种做简要的说明

传递参数的方法分为两种:
1.值传递
2.引用传递

Ⅸ Java中函数参数的传递是怎样进行的

java中的参数传递比较简单,都是值传递,没有引用的说法,就算是对象也是将其引用的地址传递过去,不想。net还有引用的说法。

阅读全文

与java传递类型参数相关的资料

热点内容
国际版本服务器是什么意思 浏览:435
压缩机十年包换 浏览:530
内核编译之后安装到哪 浏览:58
单片机加场效应管 浏览:152
怎么关闭appstore 浏览:474
学编程入门语言 浏览:307
安卓机为什么总是出现升级提示 浏览:133
b树java实现 浏览:943
亚马逊云服务器到期了怎么续费 浏览:850
我的世界网易如何在服务器里面加光影 浏览:284
nat地址访问外网服务器 浏览:966
怎样用java编译一个心形 浏览:934
如何使用python中的pygame 浏览:836
python实用小工具 浏览:24
怎么在安卓手机上去除马赛克 浏览:235
农行浓情通app怎么下载 浏览:533
怎么把原文件夹找回来 浏览:535
俄罗斯方块实现python思路 浏览:735
汉语拼音英语编译代码 浏览:501
程序员应具备的能力 浏览:606