给出下面的代码块,变量foo的值是_______?
public class X {
public static void main(String[] args) {
String foo = "ABCDE";
foo.substring(3);
foo.concat("XYZ");
}
}
我想问下结果原因,java中的值传递和引用传递到底怎么区分?请专家帮我解决下这个困扰我的问题.
public class X {
public static void main(String[] args) {
String foo = "ABCDE";
foo.substring(3);
foo.concat("XYZ");
}
}
我想问下结果原因,java中的值传递和引用传递到底怎么区分?请专家帮我解决下这个困扰我的问题.
解决方案 »
- 和大牛们确认一个关于线程池的,疑惑了很久的问题
- 使用JarOutputStream和Manifest类生成jar文件时,manifest.mf中文出现乱码,如何解决?
- 【】批处理更新疑问???【】
- 生成n个0~1之间的随机数,并且它们的和为1(JAVA)
- JAVA串口通信问题,急
- 广义网络问题
- 这个题目难死我了,那位可以指点一二
- 卖到英文版thinking in java (2),共同学习,留下qq
- 如何配置JBuilder的开发环境?
- 我是一名JAVA初学者,请问哪里有比较好的JAVA的源程序下载
- 请问怎么B机器访问A机器的文件,或A机器同步自己的文件到B机器,让B访问拷贝
- 一个简单的数组问题
String str = foo.substring(3);
Java采用值传递给方法传递参数。其中:
基本类型数值:传递实际的值。方法内部局部参数的值的改变不会影响方法外部变量的值。
(byte, short, int, long, float, double, char, boolean)
引用类型:传递的参数包含对实际变量的引用。任何出现在方法体内部的对这个变量的修改都将影响到作为参数被传递的原始变量。
(数组、字符串、对象……)楼主所用的foo.substring(3); foo.concat("XYZ");都没有用新的字符串变量接受返回值,所以不对原foo产生任何效果
基础数据类型是copy值
类是copy引用(其实引用也是一个值)
所谓的pass by value其核心是指,传递的时候要拷贝一份,所以无论是基础数据类型还是类对象,都是要在内存拷贝一份再传递的,因此都属于pass by value.
只是调用了对象的方法。
A method cannot modify a parameter of primitive type (that is, numbers or Boolean values).
A method can change the state of an object parameter.
A method cannot make an object parameter refer to a new object.
大家学JAVA多长时间了呀?
Date d=new Date();
其中d是引用,是在栈中的,而new Date()是在堆中开辟的空间保存对象,d中是堆中内容的地址,因此函数传递的是地址,这点跟C++是相同的,而int i=2;i是栈中的变量,因此只是值传递