详细解释Java传参
2015-01-06 13:44
232 查看
为了回答Lance_D的提问,重新翻看了一下java虚拟机的书。
输出
看一下内存里change1的真实过程
change2的过程
change3的过程
所以不管是
当
boolean类型
returnAddress类型
short类型:值为16位有符号二进制补码整数,默认为零
int类型:值为32位有符号二进制补码整数,默认为零
long类型:值为64位有符号二进制补码整数,默认为零
char类型:值为16位无符号整数表示的、指向基本多文种平面的Unicode码点,以UTF-16编码,默认值为Unicode的nell码点('\u0000')
float类型与double类型要复杂一些
数组类型
接口类型
分别由类实例、数组实例和实现了某个接口的类实例动态创建
输出:
实际change1过程:
change2过程:
1.先看一段代码
public static void main(String args[]){ char[] c1 = {'a','b'}; System.out.println("c1:"+c1[0]+" "+c1[1]); changer1(c1); System.out.println("c1 change1 after:"+c1[0]+" "+c1[1]); changer2(c1); System.out.println("c1 change2 after:"+c1[0]+" "+c1[1]); } private static void changer1(char[] c1) { char[] c2 = {'e','f'}; c1 = c2; } private static void changer2(char[] c1) { char[] c2 = {'e','f'}; c1[0] = c2[0]; }
输出
c1:a b c1 change1 after:a b c1 change2 after:e b
看一下内存里change1的真实过程
change2的过程
change3的过程
2.理解String
Java中的String类其实就是char数组的包装类,源码:/** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0 public String(String original) { this.value = original.value; this.hash = original.hash; }
所以不管是
String s1="ab";或者
String s1=new ("ab");其实真实的情况是
当
s1 = "cd"时
3.重新看一下java虚拟机中支持的原始数据类型与引用数据类型
原始数据类型
数值类型boolean类型
returnAddress类型
数值类型
byte类型:值为8位有符号二进制补码整数,默认为零short类型:值为16位有符号二进制补码整数,默认为零
int类型:值为32位有符号二进制补码整数,默认为零
long类型:值为64位有符号二进制补码整数,默认为零
char类型:值为16位无符号整数表示的、指向基本多文种平面的Unicode码点,以UTF-16编码,默认值为Unicode的nell码点('\u0000')
float类型与double类型要复杂一些
boolean类型
值为布尔值true和
false,默认为
false
returnAddress类型
表示一条字节码指令的操作码(opcode)引用数据类型
类类型数组类型
接口类型
分别由类实例、数组实例和实现了某个接口的类实例动态创建
4.看个复杂一点点的实例
public class Test { class Student{ public String name; public int number; public Student(String sName, int sNumber){ name = sName; number = sNumber; } } public void test(){ Student s1 = new Student("Jack",1); System.out.println("s1:"+s1.name+" "+s1.number); change1(s1); System.out.println("s1:"+s1.name+" "+s1.number); change2(s1); System.out.println("s1:"+s1.name+" "+s1.number); } private void change1(Student s1) { s1 = new Student("Mack",2); } private void change2(Student s1) { s1.name = "Mack"; s1.number = 2; } public static void main(String args[]){ new Test().test(); } }
输出:
s1:Jack 1 s1:Jack 1 s1:Mack 2
实际change1过程:
change2过程:
相关文章推荐
- Java基础-关于session的详细解释 (二)
- Java基础-关于session的详细解释
- JAVA的类加载器,详细解释
- Java中的ClassLoader详细解释
- wsdl2java详细参数解释
- Java基础-关于session的详细解释
- java中方法drawImage()的参数详细解释
- java中方法drawImage()的参数详细解释
- JAVA BMP解码 超详细解释
- JAVA 泛型由浅入深详细不过的解释
- java final和static修饰符 详细解释
- 求解java中堆栈的详细解释
- Java基础-关于session的详细解释(经典)(二)
- JAVA的类加载器,详细解释
- Mysql (控制台,C++,Java,PHP等等)各种中文乱码的详细解释
- Java基础-关于session的详细解释 (一)
- Java基础-关于session的详细解释(一)
- (JAVA SE 学习笔记)Java.SE.第011讲.面向对象之封装.续二(对一些原理机制进行了详细的解释,适合初学者学习)
- 全面解释java中StringBuilder、StringBuffer、String类之间的关系 详细出处参考:http://www.jb51.net/article/33398.htm
- Java中设置session的详细解释