关于一个java参数传递的问题

作者&投稿:史胁 (若有异议请与网页底部的电邮联系)
java 参数传递问题~

Java的参数传递总结:

JAVA的参数传递总是传"值",但是传值方式也分为两种方式,它们是靠传递参数的类型区分的。这两种类型分别为JAVA的基础类型和Object(对象)类型;基础类型包括boolean,byte,short,char,int,long,float,double,而Object就是对象,如数组.在参数为基础类型时,见代码:
public class A{
public static void main(String arg[]){
int a=3;
method1(a);
System.out.println(a);
}
public static void method1(int a){
a=4;
}
}
此时结果的输出将是1,而且只要你的值在Main函数中没变,a的值不管怎么传都不回变,这是因为a是传值,而这个"值"是a的一个拷贝,a的值在传递后的改变只是改变了a的拷贝的内容,并没有改变真正的a的值;对于参数为对象
public class A{ public class A{
public static void main(String arg[]){ public static void main(String arg[]){
int[] a=new int[1]; int[] a=new int[1];
a[0]=3; a[0]=3;
method1(a); method1(a);
System.out.println(a[0]); System.out.println(a[0]);
} }
public static void method1(int[] a){ public static void method1(int[] a){
a[0]--; a=new int[0];
} a[0]=4;
} }
}
左边的结果将是2,右边的结果将是3(未变),原因是:在传递的参数为对象时,这个传递的"值"中放的内容实际上是对向所在的地址,左边的情况是指针定位到对象的地址后,在上面把内容给改了,所以数组的值后会改变,而右边的情况为给对象新分配了一个指针到新的地址上面去,所以所有的操作都在新的地址上面,并不会影响原来的值。注:对于String,Interger,Boolean,Double等的系统对象,它们虽然是Object,但是任何方式的传递参数的值得改变并不会影响原来的值。

在参数上加final关键字?

上边那个是值传递,就是简单的数值作为参数传递,这种传递,是不会改变参数的返回值的。如上面的int参数,虽然有red=redValue;但其实改变了的red的值并没有返回。
上边那个是引用传递,就是对象作为参数传递,这种传递,若方法体内改变了该引用的值,则该参数的返回值也会发生变化。如上面的RGBColor aColor参数,因为是引用传递所以在改变aColor.red=redValue;值的时候,其调用参数pen2.getRGBColor(pen2Color); 中的pen2Color值也发生了改变。

ls说的有道理,这个是调用过程中的Stack问题,随着函数的退出,ebp改变了,所以局部变量也没用了..但是对象其实是存在heap里的,改变对象的值其实就是改变了对象指向的指针所对应的值,java全部帮你屏蔽掉了,其实实质是很深奥的!!


一个Java服务程序是否需要设置JVM参数
(2)JVM的Heap分配可以使用-X参数设定,(9)+XX:AggressiveHeap会使得 Xms 1220m没有意义 -Xms 初始Heap大小 -Xmx java heap最大值 ,不应该超过物理内存的90% -Xmn young generation的heap大小 (3)JVM有2个GC线程。第一个线程负责回收Heap的Young区。第二个线程在Heap不足时,遍历Heap,将Yo...

java 接收一个int类型的参数 返回两个String类型的字符串​_百度知 ...
1、数组是一种方法,String[]于是0下标和1下标分别存储。2、其它的方法,比如你可以用List或Set,和数组差不多一回事。3、在一个你可以用自定义对象,比如:public class TextInfo{ public String text1;public String text2;} public TextInfo functionName(int i){ ...TextInfo ti=new TextInfo()...

用JAVA编写代码:写一个名字,有三个整型参数,实现在控制台输出三个数...
以下是一个用Java编写的实现在控制台输出三个数平均值的代码:public class Main { public static void main(String[] args) { String name = "Alice"; \/\/ 定义名字 int a = 2, b = 4, c = 6; \/\/ 定义三个整型参数 double avg = (a + b + c) \/ 3.0; \/\/ 计算平均值 System....

java 一个方法中有多个类型相同的参数
Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法, 这就是多态性。下面是一个方法重载的例子:class MethodOverloading { viod receive(int i) { System.out.println("Received...

关于java编程的问题:一个类调用另一个类中构造方法中所定义的参数。
关于java编程的问题:一个类调用另一个类中构造方法中所定义的参数。 类中构造方法中所定义的参数一般是属于类的属性,都是定义为private的,所以无法直接获取或者操作类的属性,但是可以通过类的get和set方法,间接获取和操作类的属性。以下为set和get方法示范:public int getA() { return a;} pub...

java中判断一个方法有没有参数
可以通过Method这个类来判断:Class<?>[] value = method.getParameterTypes(); System.out.println(value.length);如果这个method方法有参数,那么这个value数组长度不会为0,存储的是method方法的参数;如果没有参数,则value数组为空。

java中,某方法中含有接口做参数,为什么创建一个接口的实现类可以代替该...
抽象类是不能被实例化的,而接口比抽象类更加抽象,它不能有实现方法的,当接口或者抽象类作为一个参数传入时,会默认去找到子类作为对象参数传入进去;同时 public interface CompareAble {\/\/接口 public default Apple compare(Apple a1 , Apple a2){ return a1.getSize() > a2.getSize() ? a1 ...

在java中 如何在a类中写一个带参数的方法 通过传入参数的不同在此方 ...
我告诉你,这要用得 JAVA 里的反射:\/\/B 类 public class B { public String toString() { return "我是B类";} } \/\/ C 类 public class C { public String toString() { return "我是C类";} } \/\/ A 类 public class A { \/\/ 跟距参数(类名) 获得该类的实例 public static ...

java编程实现一个方法,由参数给定一个字符串,统计并输出在该字符串中...
= null)System.out.println("字符[" + chars[i] + "]出现次数:" + count[i]);}}public static void main(String[] args) {\/\/ 测试方法LetterCount test = new LetterCount();test.countChar("Adfasadfadaere你你好好");}}原代码如下,有注释,请参考:import java.nio.charset.Charset;...

一个方法可以有多少个参数多少个返回值 Java
Java一个方法可以有0个或1个返回值。函数的返回值类型是在定义函数时指定的。return 语句中表达式的类型应与定义函数时指定的返回值类型一致。如果不一致,则以函数定义时的返回值类型为准,对 return 语句中表达式的类型自动进行转换,然后再将它返回给主调函数使用。

桐乡市19625999674: java 参数传递问题 -
定威派维: Java的参数传递总结:JAVA的参数传递总是传"值",但是传值方式也分为两种方式,它们是靠传递参数的类型区分的.这两种类型分别为JAVA的基础类型和Object(对象)类型;基础类型包括boolean,byte,short,char,int,long,float,double,...

桐乡市19625999674: 求解一道java参数传递问题 -
定威派维: 这很简单,对于基本类型是值传递,对于引用类型是引用传递.

桐乡市19625999674: java 关于java方法中参数传递的概念问题
定威派维: 引用和对象好比线和气球.引用是一根线.连在对象这个气球上.从最后一个例子给你说 Employee a引用;new Employee("Tom",33);对象 Employee a = new Employee("Tom",33);一根线a拴在了气球tom上 Employee b = new Employee(...

桐乡市19625999674: 请教Java中参数传递问题 -
定威派维: 首先要理解java里为什么会有值传递,其实java里应该只有引用传递,全部都应该是引用传递.但是java里又保留了基本数据类型,比如int什么的,java所有的数据对象都保存在堆里面,程序里用的都是对这些对象的一个引用.而基本数据类型的数据都保存在栈里面,和c语言比较类似.所以在所谓的值传递的时候,是把栈里面的值推出去了给其他方法用,无论其他方法对该值做何操作,栈里的原值都不会改变.而引用传递的时候,程序将一个对象的引用传递给其他方法,他们获得的只是一个对堆里面实际对象的引用,操作的时候实际上操作的是同一个对象.

桐乡市19625999674: Java方法中参数的值传递和引用传递的问题 -
定威派维: 你自己定义的对象,以及其他对象作为方法参数传时,是引用传递,在接收该参数的方法内改变对象参数的值是会影响到原值的,而Java中八个基本类型的方法参数传递则是值传递,在接收的方法内改变值,也只是改变形式参数,而不会影响到实参

桐乡市19625999674: java中关于参数传递的问题 -
定威派维: 原因:由于print()方法没有返回al的值,main方法定义的变量值al未改变.package sd;import java.util.*;public class Test { public Test(){} static void print(ArrayList al){ al.add(2);//al里放e69da5e6ba9062616964757a686964616f31333239303839...

桐乡市19625999674: java参数传递问题 -
定威派维: 因为你在在函数chekcParamJson中又重新声明了一个jo,相当于你给chekcParamJson内部的jo变量赋值了.方法flowNext的jo还只是处在声明的状态,尚未被实例化.两个方法的jo没有关联起来.正确做法是private static String chekcParamJson(String paramJson, JSONObject reJo) {String mes = "";try {reJo = new JSONObject(paramJson);... ...return mes;}

桐乡市19625999674: 问一个关于Java方法中参数的传递问题 -
定威派维: 1)方法的参数可以看做是方法内的局部变量2)change(s)方法内操作的是引用,change(p)方法内操作的是对象,所以改变了

桐乡市19625999674: 关于java传参的问题 -
定威派维: 区别就是传变量和对象的区别,如果在你设置的对象里有不用的参数,在你没有赋值的时候,会默认为空,在编程里,空也是一个值,你本不需要,却增加了额外的数据传输量,多少会影响性能.

桐乡市19625999674: JAVA的参数传递 -
定威派维: change(int a) p.change(pass); 虽然你吧PASS当作参数传递进去了,但是方法在执行上实际在内存中新建立一个对象a 并且a=100 并且你的程序中没有p=a或者p=100 所以P的内容实际上还是50

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网