String生成的是常量,一旦生成,就无法改变了;
解决方案 »
- String Split 问题
- 关于百度防止恶意访问的一个小问题,请达人指点!
- 虚拟机报错呀,很奇怪,同一段代码,在JB下运行没问题,在eclipse下就报错
- 新手提问(急,在线等着):帮忙解决这个小程序!
- 我是在是没辙了, 就是通不过编译, 帮忙改一下好吗, 举手之劳.
- 复制一个相同的LinkedList(HashMap),怎样才能使内容不共享?
- Aa.java uses or overrides a deprecated API
- 求助关于在SUN JDK 1.4.2环境下编译的问题!
- 请问高手学习java中的困惑问题
- 求大神这个怎么写?
- 麻烦给分析一下这道题
- 我是新手,大神来帮忙看看这段代码有什么问题吧!运行后无显示。
传参传的都是复制了原来地址的一份引用当你操作str="Boy";时就相当于str=new String("Boy"); 引用被改变了已经指向了新的地址和原来的String没有关系了;当你操作ch[0]='a';时操作的是对象里的内存值内存被改变了所以ch对象再次操作时值就被改变了
输出结果是这样的原因是在方法中只将传入参数的值做了修改,在方法执行完出栈之后就跟什么都没发生过一样
this.str = "Boy";
ch[0] = 'a';
}这样就可以修改!
输出结果是这样的原因是在方法中只将传入参数的值做了修改,在方法执行完出栈之后就跟什么都没发生过一样
层主理解错了,java的API文档里详细的说了:字符串是常量;它们的值在创建之后不能更改。这是JVM做的事情,自动给在定义字符串时添加了final来修饰。楼主如果这样写就对了public void change(String str, char ch[]) {
this.str = "Boy";
ch[0] = 'a';
}
输出结果是这样的原因是在方法中只将传入参数的值做了修改,在方法执行完出栈之后就跟什么都没发生过一样
String 定义的字符串本身就是常量;
定义①→Object(name="张三",age="22") (引用①指向"123")change(②){
②→Object(name="李四",age="55")
}调用change方法,其实是让chage的参数②指向Object(name="张三",age="22"),在方法体内引用指向改变为②→Object(name="李四",age="55"),没有改变原来的对象,所以跟原有的①无关。定义①→Object(name="张三",age="22")change(②){
②.age="12"
}
这时是改变了②所引用的Object对象的age属性也就是改变了Object对象。而①始终指向这个对象,这时打印①,就是打印出来改变的Object
定义①→Object(name="张三",age="22") (引用①指向Object(name="张三",age="22") )//上一条这里写错了change(②){
②→Object(name="李四",age="55")
}调用change方法,其实是让chage的参数②指向Object(name="张三",age="22"),在方法体内引用指向改变为②→Object(name="李四",age="55"),没有改变原来的对象,所以跟原有的①无关。定义①→Object(name="张三",age="22")change(②){
②.age="12"
}
这时是改变了②所引用的Object对象的age属性也就是改变了Object对象。而①始终指向这个对象,这时打印①,就是打印出来改变的Object
数组传递做的的是地址,所以'd'--->'a',String做的值传递,故原值出了方法就还原了。
建议看本基础的书。
定义①→Object(name="张三",age="22") (引用①指向Object(name="张三",age="22") )//上一条这里写错了change(②){
②→Object(name="李四",age="55")
}调用change方法,其实是让chage的参数②指向Object(name="张三",age="22"),在方法体内引用指向改变为②→Object(name="李四",age="55"),没有改变原来的对象,所以跟原有的①无关。定义①→Object(name="张三",age="22")change(②){
②.age="12"
}
这时是改变了②所引用的Object对象的age属性也就是改变了Object对象。而①始终指向这个对象,这时打印①,就是打印出来改变的Object
非常感谢,大神