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 Test 
public 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函数怎样传值的主要内容,如果未能解决你的问题,请参考以下文章

java类的构造函数的参数为接口类型,如何传值?

java中函数传值与引用问题

(转) java 函数形参传值和传引用的区别.

Java传值和传址

怎样在java类中调用带参数的可执行文件(比如:.exe,.sh等等)?

Java实参和形参与传值和传引用