值传递还是引用传递,这是很常考的笔试题,关于什么是值传递什么是引用传递,我就不罗嗦,大家直接记住java中的传递机制就行,两句话的事儿。
(1)首先明确java数据类型
8种基本类型
一、4种整型
byte 1字节 -128——127
short 2 字节 -32,768 —— 32,767
int 4 字节 -2,147,483,648 ——2,147,483,647(超过20亿)
long 8 字节 -9,223,372,036,854,775,808——9,223,372,036854,775,807
注释:java中所有的数据类所占据的字节数量与平台无关,java也没有任何无符号类型
二、 2种浮点类型
float 4 字节 32位IEEE 754单精度(有效位数 6 – 7位)
double 8 字节 64位IEEE 754双精度(有效位数15位)
三、1种Unicode编码的字符单元
char 2 字节 整个Unicode字符集
四、1种真值类型
boolean 1 位 True或者false
一、4种整型
byte 1字节 -128——127
short 2 字节 -32,768 —— 32,767
int 4 字节 -2,147,483,648 ——2,147,483,647(超过20亿)
long 8 字节 -9,223,372,036,854,775,808——9,223,372,036854,775,807
注释:java中所有的数据类所占据的字节数量与平台无关,java也没有任何无符号类型
二、 2种浮点类型
float 4 字节 32位IEEE 754单精度(有效位数 6 – 7位)
double 8 字节 64位IEEE 754双精度(有效位数15位)
三、1种Unicode编码的字符单元
char 2 字节 整个Unicode字符集
四、1种真值类型
boolean 1 位 True或者false
3种引用类型
类class
接口interface
数组array
(2)总结
1:“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。
2:在Java里面只有基本类型和String是按值传递,其它的都是按引用传递。
示例:
public static void change (int i ){
i=2;
}
public static void change (Integer i ){
i=2;
}
public static void change (char c ){
c='2';
}
public static void change (Double d ){
d=2.2;
}
public static void stringR(String s){
s="a";
}
public static void bufferR(StringBuffer s){
s.append("c");
}
public static void main (String args[]){
int i =1;
Integer it = new Integer("1111");
char c = '1';
Double d = 1.1;
String s = "s1111";
String s2 = new String("s2222");
change(i);
change(it);
change(c);
change(d);
stringR(s);
stringR(s2);
StringBuffer sb = new StringBuffer("java");
bufferR(sb);
System.out.println(i);
System.out.println(it);
System.out.println(c);
System.out.println(d);
System.out.println(s);
System.out.println(s2);
System.out.println(sb);
}
}
结果:
1
1111
1
1.1
s1111
s2222
javac
基本数据类型和String的构造两种方法都是值传递。
数组:
public class Give {
public void change(String s[]){
s[0]="hou";
}
public static void main (String args[]){
String s[]={"qian0","qian1"};
new Give().change(s);
System.out.println(s[0]);
}
}
结果:
hou