目录
一. 为什么定义不同类型的变量:
在创建变量时,内存管理系统会根据变量类型的不同为变量分配不同大小的内存空间。
二. 基本数据类型(内置数据类型):
1. 共八种基本类型。其中六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
2. 基本数据类型是CPU可以直接进行运算的类型
基本数据类型 | 位数(bit) | 默认值 | 说明 |
---|---|---|---|
byte | 8 | 0 | 整数 |
short | 16 | 0 | 整数 |
int | 32 | 0 | 整数 |
long | 64 | 0L(L不分大小写) | 整数 |
float | 32 | 0.0f | 单精度浮点数 |
double | 64 | 0.0d | 双精度浮点数 |
boolean | 1 | false | |
char | 16 | ‘u0000’ | Unicode字符 |
三. 引用数据类型:
1. 类似于C语言中的指针,引用类型的变量又叫引用变量,它内部存储的是一个地址,该地址指向某个对象在内存中的位置。
2. 常见的引用变量类型:数组、String和其它对象
3. 默认值:null
四. 一个示例辨析(值传递和引用传递):
1. 值传递:
// 基本类型值传递示例
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a is: " + a);
System.out.println("b is: " + b);
change(a, b);
System.out.println("After change: ");
System.out.println("a is: " + a);
System.out.println("b is: " + b);
}
public static void change(int a, int b) {
//这里操作的其实是 a,b 的副本 num1,num2 ,而不是 a,b 本身
a = 30;
b = 40;
System.out.println("In change function: ");
System.out.println("a is: " + num1);
System.out.println("b is: " + num2);
}
输出结果:
a is: 10
b is: 20
In change function:
a is: 30
b is: 40
After change:
a is: 10
b is: 20
2. 引用传递:
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println("arr[0]: " + arr[0]);
change(arr);
System.out.println("After change: ");
System.out.println("arr[0]: " + arr[0]);
}
public static void change(int[] arr) {
arr[0] = 0;
System.out.println("In change function: ");
System.out.println("arr[0]: " + arr[0]);
}
输出结果:
arr[0]: 1
In change function:
arr[0]: 0
After change:
arr[0]: 0
3. 特例 String类
public static void main(String[] args) {
String s1 = "hello";
String s2 = " world";
System.out.println(s1 + s2);
change(s1, s2);
System.out.println("After change: ");
System.out.println(s1 + s2);
}
public static void change(String s1, String s2) {
s1 = "你好";
s2 = "世界";
System.out.println("In change function: ");
System.out.println(s1 + s2);
}
输出结果:
hello world
In change function:
你好世界
After change:
hello world
String类型作为参数传递时,是一个看上去为值传递的引用传递。
原因:
The
String
class represents character strings. All string literals in Java programs, such as"abc"
, are implemented as instances of this class.Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared. For example:
String str = "abc";
is equivalent to:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
大概意思是:
String类型的值在创建后即不可修改,任何对String类型对象的改变都相当于,创建一个含有修改后内容的新对象,并将新对象的地址赋值给原引用变量(在上面的例子中是 str )
相关链接: