java函数怎样传值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java函数怎样传值相关的知识,希望对你有一定的参考价值。
public class t4
String s="aa";
public static void main(String[] args)
t4 t=new t4();
t.add(t.s);
System.out.println(t.s);
private void add(String s)
s=s+"b";
System.out.println(s);
为什么结果还是aa,我觉得应该是aab啊,Java是传递是引用,那么s获得了t.s的引用,那么s和t.s指向同一个java对象,所以应该是aab。
我还想问一下int等基本数据类型他们不是类么?那Integer呢,为什么我用Integer来创建的对象还是改不了原来的数字?
大神求救。。
aab
aa
这是我运行后的结果。t.add(t.s)方法调用的结果先输出,第二个在main方法内是全局变量直接输出。
二、int不是类类型。
Integer n=new Integer("0");
int n=0;
是一样的效果。
基本数据类型和相应的包装类
boolean-Boolean
char----Character
byte----Byte
short--- Short
int-----Integer
long----Long
float---Float
double--Double
参考技术A传值就是你改变这个值,不会改变原值。例如
int a=1;
把a作为参数经过方法调用,在方法中改变a的值如。
a=2;
在方法中a是变成2了。
但是在外面a还是1。.
如果是传引用,值是会变的。
例如这样
public class Testpublic void test(List list)
list.remove(0);
list.add("b");
public static void main(String[] args)
String a="123";
List list=new ArrayList();
list.add(a);
new Test().test(list);
System.out.println(list.get(0));
参考技术B 基本数据类型都是值传递,string比较特殊,它是一个类,但不是引用传值,string一旦赋值,所指的引用(内存地址指向的值)就不能改变。string a="qwr" ,a=a+"ewer"此时实际上是又创建了一个地址引用,原有的引用地址成了垃圾,无法再使用,但他的值是没有变的本回答被提问者采纳 参考技术C 这不是传值的问题啊,其实是代码执行的循序的问题啊。这样:
public class t4
String s="aa";
public static void main(String[] args)
t4 t=new t4();
t.add(t.s);
//System.out.println(t.s);
private void add(String s)
s=s+"b";
System.out.println(s);
integer是int的封装类啊。 参考技术D 你在add方法里面赋值的s是实参的值 实参的s变成aab,类变量s还是aa
如果想要t.s是aab在add里面this.s = s + "b";
java中函数传值与引用问题
从C++转java,在使用函数传对象时,碰到一点问题,今天特意验证了一下:
public class App { public static void doubleTest(double d) { d=8.0; System.out.println( "[INNER doubleTest]double:"+d); } public static void DoubleTest(Double dd) { dd=8.0; System.out.println( "[INNER DoubleTest]Double:"+dd); } public static void ObjectTest(ObjectChange obj) { obj = new ObjectChange(5); System.out.println( "[INNER ObjectTest]Object:"+obj.getTT()); obj.setTT(8); System.out.println( "[INNER ObjectTest]Object:"+obj.getTT()); } public static void ObjectChangeTest(ObjectChange obj) { obj.setTT(8); System.out.println( "[INNER ObjectChangeTest]Object:"+obj.getTT()); obj = new ObjectChange(5); System.out.println( "[INNER ObjectChangeTest]Object:"+obj.getTT()); obj.setTT(6); System.out.println( "[INNER ObjectChangeTest]Object:"+obj.getTT()); } public static void main( String[] args ) { System.out.println( "Source:" ); double d1=1; Double d2=2.0; ObjectChange obj1 = new ObjectChange(1); System.out.println( "double:"+d1+" Double:"+d2 +" Object:"+ obj1.getTT()); System.out.println( "After:" ); doubleTest(d1); DoubleTest(d2); ObjectTest(obj1); System.out.println( "double:"+d1+" Double:"+d2 +" Object:"+ obj1.getTT()); ObjectChangeTest(obj1); System.out.println( "Object:"+ obj1.getTT()); } }
程序输出结果:
总结:
obj在函数体内作为临时变量,可读取对象内容,采用“=”(赋值运算符)改变的是临时对象的内容,赋值后,再操作的也是临时对象的内容;
只有在赋值前调用对象的成员方法(setTT())才能真正改变obj对象的内容;
以上是关于java函数怎样传值的主要内容,如果未能解决你的问题,请参考以下文章