java中有地址参数传递吗?
8个回答
展开全部
你需要明白,地址参数传递的真实含义,然后就明白了,只拿概念去套是没有意义的。套概念只会今天问 java 有没有,明天问其它的语言有没有。
java 的参数传递不同于按值传递,也不完全同于按地址传递,因为这需要区分基本类型和抽象类型。
名义上 Java 都是按值传递,但对于抽象类型来说又有引用传递的效果。指向原始对象,函数调用后的效果也导致了目标对象被改动,之后持有指向目标对象的符号的变量就跟着有了变化,这点就像引用传递。
所以 Java 的核心人士都说 Java 只有按值传递。但理解了 Java 的引用之后就明白,对于抽象类型的对象,这其实也是引用传递。所以在 Java 中没直接与 C++ 地址传递。
Java API 中有些类型的是 immutable,就是说它的状态在创建之后不再更改,所以修改需要创建一个全新的对象,比如 String, Integer 之类的,所以 str + "sest" 其实并未改变 str 对象本身,所以需要用 str = str + "test" 来接收改变之后的结果,它是一个新的 String 对象,不同于 str + "test" 调用之前的那个 str。
java 的参数传递不同于按值传递,也不完全同于按地址传递,因为这需要区分基本类型和抽象类型。
名义上 Java 都是按值传递,但对于抽象类型来说又有引用传递的效果。指向原始对象,函数调用后的效果也导致了目标对象被改动,之后持有指向目标对象的符号的变量就跟着有了变化,这点就像引用传递。
所以 Java 的核心人士都说 Java 只有按值传递。但理解了 Java 的引用之后就明白,对于抽象类型的对象,这其实也是引用传递。所以在 Java 中没直接与 C++ 地址传递。
Java API 中有些类型的是 immutable,就是说它的状态在创建之后不再更改,所以修改需要创建一个全新的对象,比如 String, Integer 之类的,所以 str + "sest" 其实并未改变 str 对象本身,所以需要用 str = str + "test" 来接收改变之后的结果,它是一个新的 String 对象,不同于 str + "test" 调用之前的那个 str。
展开全部
是这样的,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,效果就是传地址一样
}
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,效果就是传地址一样
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有,JAVA不能直接操作底层的内存地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
http://zhidao.baidu.com/question/1753634614165618348.html?push=keyword
看看就是你提问的这个网页地址栏的地址push=keyword就是地址参数传值
看看就是你提问的这个网页地址栏的地址push=keyword就是地址参数传值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java中不能直接管理内存,都是直接由jvm本身来管理,内存资源也是由垃圾回收器来回收。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询