java中有地址参数传递吗?

2025-02-27 09:24:02
推荐回答(5个)
回答1:

你需要明白,地址参数传递的真实含义,然后就明白了,只拿概念去套是没有意义的。套概念只会今天问 java 有没有,明天问其它的语言有没有。

java 的参数传递不同于按值传递,也不完全同于按地址传递,因为这需要区分基本类型和抽象类型。
名义上 Java 都是按值传递,但对于抽象类型来说又有引用传递的效果。指向原始对象,函数调用后的效果也导致了目标对象被改动,之后持有指向目标对象的符号的变量就跟着有了变化,这点就像引用传递。

所以 Java 的核心人士都说 Java 只有按值传递。但理解了 Java 的引用之后就明白,对于抽象类型的对象,这其实也是引用传递。所以在 Java 中没直接与 C++ 地址传递。

Java API 中有些类型的是 immutable,就是说它的状态在创建之后不再更改,所以修改需要创建一个全新的对象,比如 String, Integer 之类的,所以 str + "sest" 其实并未改变 str 对象本身,所以需要用 str = str + "test" 来接收改变之后的结果,它是一个新的 String 对象,不同于 str + "test" 调用之前的那个 str。

回答2:

是这样的,java传参,举个例子:
public String test(String str){
str = str+"test";
return str;
}
在这个中间,你需要返回str才能得到str后改变后的值,如果要像c传地址那样的效果可以这样做:
public void test2(final String str){
str = str + "test";
}

然后测试下:
public void static main(String[] args){
String str = "123";
System.out.println(test2(str));
//打印出来的:123test,效果就是传地址一样
}

回答3:

没有,JAVA不能直接操作底层的内存地址

回答4:

http://zhidao.baidu.com/question/1753634614165618348.html?push=keyword
看看就是你提问的这个网页地址栏的地址push=keyword就是地址参数传值

回答5:

  java中不能直接管理内存,都是直接由jvm本身来管理,内存资源也是由垃圾回收器来回收。