public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//StringBuffer str=new StringBuffer("World");
String str=new String("World");
char ch[]={'h','e','l','l','o'};
change(str,ch);
System.out.print(str+"and");
System.out.println(ch);
}
public static void change(String str,char ch[]){
//str.append("change");
str="change";
ch[0]='c';
}
}
这个程序的输出为worldandcello
使用String str =new String();创建的不是一个对象吗,str为一个引用。那调用change(str,ch)为什么不是传地址。
发信人: IcyFenix ().println("helloworld"), 信区: Java
标 题: Re: 求教一个参数传值问题
发信站: 水木社区 (Mon Oct 31 15:34:32 2011), 站内
先明确一点,在jvm里面,没有“按引用传递”这回事,只有对reference数据进行值传
递。
可以对着你的代码来说明这点:
String str=new String("World"); // 假设String("World")的地址为0x1111,那有一
个reference类型的局部变量A=0x1111.
char ch[]={'h','e','l','l','o'}; // 同理,假设数组起始地址为0x2222,那有一
个reference类型的局部变量B=0x2222.
change(str,ch); // 方法调用,新建栈帧,栈帧中第0、1个局部变量C、D赋值为
0x1111、0x2222
str="change"; // 把局部变量C的值改为0x3333,但是这并不影响原来A的值继续
=0x1111
ch[0]='c'; // castore指令执行时,操作数栈上的3个参数是0x2222、0、
'c',因此castore把地址在0x2222的数组的第0个元素赋值为'c'。
不知道这样讲是否能解答你的疑问。
关于invokeinterface的问题:
inovkeinterface中的count参数用于确定方法参数个数,这个完全可以在方法描述符中
获取,其他几个invoke指令也就是从方法描述符中取的。而inovkeinterface指令保留
这个count完全是历史原因。见《JVMS Java SE 7》介绍interinterface这段:
The count operand of the invokeinterface instruction records a measure of
the number of argument values, where an argument value of type long or type
double contributes two units to the count value and an argument of any other
type contributes one unit. This information can also be derived from the
descriptor of the selected method. The redundancy is historical.
另外,在jdk7中加入的invokedynamic中,那2个固定为0的直接操作数,也是由于这
个“历史原因”,因为interfacedynamic最初是以inovkeinterface为模板设计的。
分享到:
相关推荐
一个窗体向另一个窗体传值,自己学习C#写的代码,适合初学者练习。
标签 样式 二维码 一维码 文本等参数传递等动态复制 实现标签的样式赋值
Web开发中的window.open父子窗口传值问题 部署在tomcat中进行
asp.net页面通过URL参数传值中文乱码问题解决办法
QT两个窗口之间传值,打开一个子页面在子页面输入内容 再将内容传到父窗口
解决java enctype multipart form-data文件上传传值问题 不使用jspsmartupload组件 可以轻轻松松 解决传值问题
asp.net中URL参数传值中文乱码的三种解决办法
各种定向携带参数传值的解决方法。适用多种动态页面编程。
一个基于ASP.NET的主从页面用户控件参数传值处理程序例子。
浅谈Java中方法的参数传值.pdf
iOS无参数接口声明,传值!使用AFNETwork!
是一个block传值的测试小demo
浅谈Java中方法的参数传值
Java中参数传值的代码清单.pdf 学习资料 复习资料 教学资源
javascript 两个页面之间传值 使用window.open()
模态框(Modal)是覆盖在父窗体上的子窗体。...以上所述是小编给大家介绍的Bootstrap 模态框(Modal)带参数传值实例,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的
一: 参数传值的方法 1: data-id 我们可以给HTML元素添加data-*属性来传递我们需要的值,使用方法说明: (1)设置data-id (2): 取值 + 传值 playTap:function(e) { const dataset = e.currentTarget.dataset; ...
一个页面内的多个iframe之间相互传值 ,相互调用js的例子,帮助大家更加好的利用这个小例子。附上源码。
VB参数传递(传值ByVal与传址ByRef)[整理].pdf