求解此题为什么选择A呢 求大神解答,初学者一枚 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 主要是后面的那个数组吧,change中的n,后面重新指向了一个新的引用,不影响原来的引用,如果在改变引用之前加一句n[1]=5的话,就会改变原数组的值 此题考点应该是局部变量的概念吧,main和change方法定义的变量都是局部变量,存在栈内存中,两者当然不能互相调用彼此的变量。所以输出语句里的还是main里的局部变量的值 java用的是值传递。方法调用。对于基本类型来说,就会进行一个值的拷贝,传进去的是值的拷贝,因此修改值,不会对之前的有任何影响。对于引用类型来说,穿进去的是引用的拷贝,虽然是两个引用,但是两个引用指向的是同一个对象,所以在方法里面对值进行修改,会影响到之前的值。 没太理解,现在是引用传递而且在方法内改了值,也没有对之前的初值产生影响呀?Java里面只有值传递,理解这个,有时候看起来传递的是引用,实际上是引用的值的拷贝,说白了还是值。Int数组,就是基本类型,传进去不会被修改,这个没有什么问题。String是对象,假如在方法外面引用叫s1,这个引用指向对象s,传值的时候传了另外一个引用叫s2,这个是由s1拷贝来的,也指向s,字符串截取以后,生成了一个新的对象s3,然后让s2指向了s3,但是s1并没有变化。仍然指s,而s2是临时变量,方法结束被销毁,s3最后被垃圾回收。 这里简单的来说是变量作用域的问题,这里 result和nums都是主方法中的局部变量,在主方法以外对变量进行的操作不会对该变量产生影响。 我的理解是 change方法的返回值是空(void) chang方法并没有数值返回到调用处 我的理解是 change方法的返回值是空(void) chang方法并没有数值返回到调用处 main方法中的result和nums就像是你有2张图片,调用了change方法就像你将这2张图片复制了一份给了别人,别人对这2张复制的图片进行了ps,但对你的图片还是没有影响 没太理解,现在是引用传递而且在方法内改了值,也没有对之前的初值产生影响呀?String a = "abc" , a 的值 是地址.int[] b = new int[]{1,2,3}; b 的值也是地址. 在方法中, 改变了形参变量指向的地址, 对 main 方法中的 变量的值 一点影响都没有. 所以 ... 好像问题在于change()函数。严格地说,这个函数是错的:1. 那个new 怎么理解?2. substring()应该怎么使用?答案应该是系统报错。 change方法里改变的是它的局部变量x和n,和main方法里的result和nums没有关系,因为result是"abc",nums[1]是2,所以答案选A 局部变量不影响全局变量,change函数内的两个变量在函数执行后就被销毁了。 public class dfas { public static void main(String[] args) { ddd dd=new ddd(); dd.x="abc"; as(dd); System.out.print(dd.x); } static void as(ddd dd) { dd.x=dd.x.substring(1); }}class ddd{ String x;}这种应该会改变你那个传过去是值,方法里面改的是局部变量 String类型的变量一旦定义,就无法更改了啊,你定了String result="abc",在内存里result指向的就是字符串abc,因为String类用final修饰,不可更改。所以你在main方法里面执行change方法,没啥意义,并且,两个方法里面都是局部变量吧~ 传递的都是副本,除非修改传递的求组的内部值例如n[1]=5,因为这样是修改了你拷贝的那份引用跟原来引用共同指向的那份数据;如果是n=new()[4.5.6]实际上是拷贝的引用指向了新的内存地址,而原来的引用指向的地址并没有改变,string 同理。 Java总是按值传递。String是基本数据类型,因此,一开始,Java堆中存在"abc”,result存在于栈中,并指向堆中的"abc";当执行change方法时,堆中会复制一个"abc",并且x指向这个复制的"abc";因此,x对应的值改变,并不会影响到result.此时的result依然是“abc”.而int[]数组是对象。因此change方法中的n与原来的nums都指向堆中的{1,2,3},此时的堆中并没有复制;当n重新创建一个数组对象{4,5,6}时,相当于栈中的n指向堆中的新对象{4,5,6},而nums并不会改变。具体Java按值传递详解可参考此文:java引用传递和值传递的详细探讨,一起来围观吧 https://blog.csdn.net/zzq1992126/article/details/50239855 public static void main(String[] args) { String result = "adb"; int[] nums = {1,2,3,5}; change(result,nums); System.out.println(nums[1]);//3 } static void change(String result,int[] array){ array[1] = 3; }字符串和数组都是在堆中创建的,栈中存在的只是个引用地址而已,执行change方法传递过去的是二者指向的内存地址。 第一次編譯JAVA 問題 java 散列码问题 学JAVA用什么书好?给个建议! 给小弟个建议,我打算投身于计算机软件方面的工作,我该选c++,java, .net三个中哪个方向呢?(马上要分流了)!拿不定主意 【jFresH_MaN】100分问一个非常基础的问题,大家踊跃回答哦 请问如何建立一个树形的数据结构??(急)在线等 我的浏览器不支持java怎么办? 急!!! Java面试时的一个排列组合问题 在JAVA中能否使用API呀?如何调用? 大家一起来讨论一下 这道看似简单的jave面试题,80%的人都会错 卡在这了,一直运行不了,到底哪里出现问题了,老铁们支支招呗?
所以输出语句里的还是main里的局部变量的值
方法调用。
对于基本类型来说,就会进行一个值的拷贝,传进去的是值的拷贝,因此修改值,不会对之前的有任何影响。
对于引用类型来说,穿进去的是引用的拷贝,虽然是两个引用,但是两个引用指向的是同一个对象,所以在方法里面对值进行修改,会影响到之前的值。
Java里面只有值传递,理解这个,有时候看起来传递的是引用,实际上是引用的值的拷贝,说白了还是值。
Int数组,就是基本类型,传进去不会被修改,这个没有什么问题。
String是对象,假如在方法外面引用叫s1,这个引用指向对象s,传值的时候传了另外一个引用叫s2,这个是由s1拷贝来的,也指向s,字符串截取以后,生成了一个新的对象s3,然后让s2指向了s3,但是s1并没有变化。仍然指s,而s2是临时变量,方法结束被销毁,s3最后被垃圾回收。
这里简单的来说是变量作用域的问题,这里 result和nums都是主方法中的局部变量,在主方法以外对变量进行的操作不会对该变量产生影响。
int[] b = new int[]{1,2,3}; b 的值也是地址.
在方法中, 改变了形参变量指向的地址, 对 main 方法中的 变量的值 一点影响都没有.
所以 ...
ddd dd=new ddd();
dd.x="abc";
as(dd);
System.out.print(dd.x); }
static void as(ddd dd)
{
dd.x=dd.x.substring(1);
}
}
class ddd
{
String x;
}
这种应该会改变
你那个传过去是值,方法里面改的是局部变量
具体Java按值传递详解可参考此文:java引用传递和值传递的详细探讨,一起来围观吧 https://blog.csdn.net/zzq1992126/article/details/50239855
String result = "adb";
int[] nums = {1,2,3,5};
change(result,nums);
System.out.println(nums[1]);//3 } static void change(String result,int[] array){
array[1] = 3;
}
字符串和数组都是在堆中创建的,栈中存在的只是个引用地址而已,执行change方法传递过去的是二者指向的内存地址。