Java之语法之方法调用之地址传值之空对象(null)
程序员文章站
2022-06-10 17:30:23
...
一、问题:
输出:
原因是:
只有非空的引用对象才可以传值。
二、Java是引用传递还是值传递?
通过上面可以看出,Java 是值传递。而传递的是一个引用。
“值传递”和“引用传递”的区别是什么?
在“一、问题”中,如果由于 String name = null;,此时根本没有值,
也就是没有产生新的对象。所以无法进行赋值。
那么,对于有值的情况呢?
下面这段代码的输出是什么?
答案:
AAA 。
当 "AAA" 被作为参数传递过来时,方法体中的局部变量 name 指向 "AAA",
然后 赋值运算符(=)把新的值 "BBB" 赋给了局部变量 name。
因为是值传递,只不过传递的值是一个地址。传递的是地址,就叫“地址引用”吗?
非也。何为“引用”?“引用”的目地是为了什么?显然,引用到地址,就是想要
对其修改。能够“引用”到地址,修改地址。这里的“引用”即为“修改”之意。
但是,Java方法体内并不会直接在传递过来的地址上对其做赋值或修改,
而是在方法体内生成局部变量(参数),指向这个地址。然后对局部变量进行操作。
即:方法体内,只能引用,无法修改。
只能引用参数的值(地址),而不能对这个值(地址)进行修改或赋值操作。
这里特别需要注意赋值运算符(=)所起的作用。
所以Java是值传递。无法修改或修改不了传递过来的参数的地址的指向。
Java is Pass by Value and Not Pass by Reference!
引用:
http://*.com/questions/14017461/null-reference-in-java
http://www.journaldev.com/3884/java-is-pass-by-value-and-not-pass-by-reference
-
public void test(){ String name = null; setReference(name); if(name == null){ System.out.println("name is null"); } } private void setReference(String name){ name = "java"; }
输出:
// name is null
原因是:
只有非空的引用对象才可以传值。
二、Java是引用传递还是值传递?
package com.journaldev.test; public class Test { public static void main(String[] args) { Balloon red = new Balloon("Red"); Balloon blue = new Balloon("Blue"); swap(red, blue); System.out.println("red color="+red.getColor()); System.out.println("blue color="+blue.getColor()); foo(blue); System.out.println("blue color="+blue.getColor()); } private static void foo(Balloon balloon) { balloon.setColor("Red"); // refer to param. balloon = new Balloon("Green"); // refer to a new object. balloon.setColor("Blue"); } //Generic swap method public static void swap(Object o1, Object o2){ Object temp = o1; o1=o2; o2=temp; } } /* red color=Red blue color=Blue blue color=Red */
通过上面可以看出,Java 是值传递。而传递的是一个引用。
“值传递”和“引用传递”的区别是什么?
在“一、问题”中,如果由于 String name = null;,此时根本没有值,
也就是没有产生新的对象。所以无法进行赋值。
那么,对于有值的情况呢?
下面这段代码的输出是什么?
public void run(){ String name = "AAA"; setReference(name); System.out.println(name); } private void setReference(String name){ name = "BBB"; }
答案:
AAA 。
当 "AAA" 被作为参数传递过来时,方法体中的局部变量 name 指向 "AAA",
然后 赋值运算符(=)把新的值 "BBB" 赋给了局部变量 name。
因为是值传递,只不过传递的值是一个地址。传递的是地址,就叫“地址引用”吗?
非也。何为“引用”?“引用”的目地是为了什么?显然,引用到地址,就是想要
对其修改。能够“引用”到地址,修改地址。这里的“引用”即为“修改”之意。
但是,Java方法体内并不会直接在传递过来的地址上对其做赋值或修改,
而是在方法体内生成局部变量(参数),指向这个地址。然后对局部变量进行操作。
即:方法体内,只能引用,无法修改。
只能引用参数的值(地址),而不能对这个值(地址)进行修改或赋值操作。
这里特别需要注意赋值运算符(=)所起的作用。
所以Java是值传递。无法修改或修改不了传递过来的参数的地址的指向。
Java is Pass by Value and Not Pass by Reference!
引用:
http://*.com/questions/14017461/null-reference-in-java
http://www.journaldev.com/3884/java-is-pass-by-value-and-not-pass-by-reference
-
上一篇: iReport null转为空字符串
下一篇: 为select查询出来的Null赋初值