java 方法传参

这是小弟的第一篇博客,写得不好还请看官见谅哈!

java 有两种数据类型:基本数据类型(int,short,long,byte,float,double,boolean,char),引用数据类型(基本数据类型之外的数组,String,对象等等)。

在方法中传参数有两种方式:值传递和引用传递

先看下面的一个实例。

public class Stu {
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

public class Test {

protected static void updateStu(Stu stu) {
stu.setAge(5);
stu.setName("Li");
//stu=new Stu();
//stu.setAge(5);
//stu.setName("Li");
//用上面注释的代码替换掉未注释,修改前后的stu是一样的,即3,zhang
}
protected static void updateStr(String str) {
str=new String("update");
//str="update";
//这两行代码效果一样
}
protected static void updateInteger(Integer i) {
i=10;
}
protected static void updateBasic(int i) {
i=10;
}
protected static void updateArray(int[] test) {
if(test.length>1)
test[0]=10;
}
protected static void updateCharArray(char[] cs) {
cs=new char[3];
cs[0]=‘a‘;
cs[1]=‘b‘;
cs[2]=‘c‘;
}
public static void main(String[] args)
{
Stu stu=new Stu();
stu.setAge(3);
stu.setName("Zhang");
System.out.println("1-----------当方法参数为普通对象");
System.out.println("初始值");
System.out.println(stu.getAge());
System.out.println(stu.getName());
updateStu(stu);
System.out.println("修改后");
System.out.println(stu.getAge());
System.out.println(stu.getName());
System.out.println("2-----------当方法参数为String");
String str1=new String("haha");
String str2="hehe";
System.out.println("初始值");
System.out.println(str1);
System.out.println(str2);
updateStr(str1);
updateStr(str2);
System.out.println("修改后");
System.out.println(str1);
System.out.println(str2);
System.out.println("3-----------当方法参数为Integer");
Integer integer=new Integer(5);
System.out.println("初始值");
System.out.println(integer);
updateInteger(integer);
System.out.println("修改后");
System.out.println(integer);
System.out.println("4-----------当方法参数为八种基本类型");
int t=5;
System.out.println("初始值");
System.out.println(t);
updateBasic(t);
System.out.println("修改后");
System.out.println(t);
System.out.println("5-----------当方法参数为整数数组");
int[] test ={1,2,3};
System.out.println("初始值");
System.out.println(test[0]+"--"+test[1]+"--"+test[2]);
updateArray(test);
System.out.println("修改后");
System.out.println(test[0]+"--"+test[1]+"--"+test[2]);
System.out.println("6-----------当方法参数为字符数组");
char[] cs ={‘1‘,‘2‘,‘3‘};
System.out.println("初始值");
System.out.println(cs);
updateCharArray(cs);
System.out.println("修改后");
System.out.println(cs);
}
}

=======================================输出

1-----------当方法参数为普通对象
初始值
3
Zhang
修改后
5
Li
2-----------当方法参数为String
初始值
haha
hehe
修改后
haha
hehe
3-----------当方法参数为Integer
初始值
5
修改后
5
4-----------当方法参数为八种基本类型
初始值
5
修改后
5
5-----------当方法参数为整数数组
初始值
1--2--3
修改后
10--2--3
6-----------当方法参数为字符数组
初始值
123
修改后
123

根据上面的结果,可以得出这样的结论

1、基本数据类型采用的是值传递,(类似C里面的传值),它不会修改实参的值

2、引用数据类型采用的是引用传递,(类似C里面的传指针),引用可以理解成JAVA的指针,它指向对象在堆里面分配的首地址

3、String修改后为什么实参没变,这个我看过很多文章说String就相当于是char[]的包装类。包装类的特质之一就是在对其值进行操作时会体现出其对应的基本类型的性质。

但是小弟有另一番理解:str="update",这句话会有有如下动作,在栈里面查找有没有value="update"的String引用,要是有就将str指向堆里面的该地址,要是没有就会重新创建一个String对象"update",并将str指向该对象在堆中的地址。在上面的实例中,调用updateStr方法,会将str的引用赋给形参str,而在这个方法中str又重新指向了另一个String对象,但是这个过程并没有修改实参所指向的String对象,这个就和updateStu方法一样,只要new了一个新的对象,那么实参指向的对象就不会改变。

时间: 2024-10-16 06:02:40

java 方法传参的相关文章

Java方法传参

1.创建students类-----//主要构造对象 http://vipnoon.blog.51cto.com/7589908/1792786 2.创建calc类---------//主要构造方法 public class calc { public void calc1(int num){  num = num + 1; } public void calc2(students stu){ stu.setAge(stu.getAge()+1); } } 3.创建calcDemo类-----/

EasyUI queryParams属性 在请求远程数据同时给action方法传参

http://www.cnblogs.com/iack/p/3530500.html?utm_source=tuicool EasyUI queryParams属性 在请求远程数据同时给action方法传参 属性名 属性值类型 描述 默认值 queryParams object 在请求远程数据的时候发送额外的参数. 代码示例: $('#dg').datagrid({ queryParams: { name: 'easyui', subject: 'datagrid' } }); {} Actio

方法传参

关于方法传参: (参数也叫 参变量 ,它是专属于方法体的局部变量!) 首先我想先说一个结论:基本数据类型作形参时,实参向形参传递的是值:引用数据类型作形参时传递的是 对象.(其实传递都是值,具体可参考http://www.cnblogs.com/wsw-blog/articles/my-bolgs-898558572.html)    我们知道在调用带参方法时需要按照该方法的形参变量列表将类型.顺序一 一对应的实参变量的值传递过去. 这就是方法的参数传递! 当基本数据类型作为形参时,无论形参变量

javascript 字符串方法传参

javascript 字符串方法传参由于嵌套的单引号,双引号过多.有点混乱.. 正确方法如下: '   <td align="left"><input type="button"  id="btnBack" value="确定" class="bigbt"  onclick="continuePassword(\''+cardnumber+'\')"/></

MyBatis dao层 方法传参

MyBatis dao层 方法传参有三种方法. 1. 以下标的方法获取参数. <update id="insertSuccessKilled">       INSERT ignore INTO success_killed(seckill_id,user_phone,state)VALUES (#{0},#{1},1) </update> 2. 以map作为dao方法中的参数,通过使用key和类型来获取参数. <select id=" sele

cocos2dx 菜单按钮回调方法传参 tag传参

.h文件 void menuCallBack(CCObject* pSender); .cpp CCMenuItemSprite* item = CCMenuItemSprite::create( menuCB1, menuCB2, this, menu_selector(helloworld::menuCallBack)); item->setTag(m); 回调方法 void helloworld::menuCallBack(CCObject* pSender) { CCNode* node

wx.request中POST方法传参问题,用到JSON.stringify()

前面用到了get方法传参,现在post也需要传参传输内容进去,下面我来一步步研究: 遇到的问题: 传参进去后反馈参数为空,没有报错.错误代码如下: wx.request({ url: '某地址', method: "post", data: { msg: { "phone": "某电话", "content": this.data.text, "date":this.data.time } }, heade

Java URL传参中文乱码问题

我们经常会遇到这样的场景:在URL中传递参数,如果该参数为中文,如果设置不当,会出现乱码问题. URL传参所使用的编码为服务器中设置的编码,而ajax请求的编码为页面编码. 如果不设置tomcat的默认编码为ISO-8859-1,而如果在设置中加入 useBodyEncodingForURI="true" <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="

java中传参内幕

java中的参数传递传的其实是value. 先说一种现象,废话不多说,直接代码: A类(作为参数传递): public class A { int i=1; } B类: public class B { B(A a){ a.i+=1; } } Test类(运行类): public class Test { public static void main(String[] args) { A a = new A(); B b = new B(a); B b1 = new B(a); B b2 =