「java传递参数保证安全」java参数传递机制

博主:adminadmin 2022-12-31 08:33:11 698

本篇文章给大家谈谈java传递参数保证安全,以及java参数传递机制对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

关于java方法参数传递的问题

Java代码

public final class ParamTest {

// 初始值为0

protected int num = 0;

// 为方法参数重新赋值

public void change(int i) {

i = 5;

}

// 为方法参数重新赋值

public void change(ParamTest t) {

ParamTest tmp = new ParamTest();

tmp.num = 9;

t = tmp;

}

// 改变方法参数的值

public void add(int i) {

i += 10;

}

// 改变方法参数属性的值

public void add(ParamTest pt) {

pt.num += 20;

}

public static void main(String[] args) {

ParamTest t = new ParamTest();

// 为基本类型参数重新赋值

t.change(t.num);

System.out.println(t.num);

// 为引用型参数重新赋值

t.change(t);

System.out.println(t.num);

// 改变基本类型参数的值

t.add(t.num);

System.out.println(t.num);

// 改变引用类型参数所指向对象的属性值

t.add(t);

System.out.println(t.num);

}

}

这段代码的运行结果如下:

20

从上面这个直观的结果中我们很容易得出如下结论:

对于基本类型,在方法体内对方法参数进行重新赋值,并不会改变原有变量的值。

对于引用类型,在方法体内对方法参数进行重新赋予引用,并不会改变原有变量所持有的引用。

方法体内对参数进行运算,不影响原有变量的值。

方法体内对参数所指向对象的属性进行运算,将改变原有变量所指向对象的属性值。

上面总结出来的不过是我们所看到的表面现象。那么,为什么会出现这样的现象呢?这就要说到值传递和引用传递的概念了。这个问题向来是颇有争议的。

大家都知道,在JAVA中变量有以下两种:

基本类型变量,包括char、byte、short、int、long、float、double、boolean。

引用类型变量,包括类、接口、数组(基本类型数组和对象数组)。

当基本类型的变量被当作参数传递给方法时,JAVA虚拟机所做的工作是把这个值拷贝了一份,然后把拷贝后的值传递到了方法的内部。因此在上面的例子中,在调用

Java代码

// 为方法参数重新赋值

public void change(int i) {

i = 5;

}

方法的情况下,变量i和ParamTest型对象t的属性num具有相同的值,却是两个不同变量。变量i是由JAVA虚拟机创建的作用域在change (int i)方法内的局部变量,在这个方法执行完毕后,它的生命周期就结束了。

Java编程中参数传递

两个情况:

1、args的长度不等于3,退出。

2、args的长度等于3,但不会进for循环,因为x已经等于0是不可能大于3的。

(x=0,还xargs.length??那args必须比0小才行啊!)

这要看args的长度来判断了,你这样断章起义很难判断啊!楼主!

java 参数传递问题

1.JAVA基本类型和String型作为参数时,为传值方式,只把值传入方法,不管在方法中怎么处理这个参数,原值不变的;

2.按你写的代码 A2是没法在CHANGE内初始化的。

3.建议去看下JAVA传值和传址的区别,你就会很明白的!

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值的“内存单元”的一个copy,所以函数swap里面的int和外面的int根本就不是一个东西,当然不能反射出去影响外面

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

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

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

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

关于java参数传递

Java基本数据类型传入方法是值传递,也就是将值赋值给方法参数,在方法在改参数与原变量无关。

而其他三个都是引用数据类型,传递的都是地址,方法根据地址操作都是原对象,所以修改了。

关于java传递参数保证安全和java参数传递机制的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。