前言
Java有两大数据类型:基本型和引用型。基本型有int(整型)、short(短整型)、长整型(long)、byte(字节型)、float(单精度型)、double(双精度型)、char(字符型)以及boolean(布尔型)8种类型。
占字节数 | 默认值 | 包装类 | |
int | 4 | 0 | Integer |
short | 2 | 0 | Short |
long | 8 | 0L | Long |
byte | 1 | 0 | Byte |
float | 4 | 0.0f | Float |
double | 8 | 0.0d | Double |
char | 2 | Character | |
boolean | 1/8(即1位) | flase | Boolean |
实践出真理,我们可以看一下它们所占的字节数和它们的默认值:
public class test2 {
static int i;
static short s;
static long l;
static byte b;
static float f;
static double d;
static char ch;
static boolean bool;
public static void main(String[] args) {
System.out.println("int型占"+Integer.SIZE/8+"个字节,默认值 ="+i);//SIZE以bit为单位
System.out.println("short型占"+Short.SIZE/8+"个字节,默认值 ="+s);
System.out.println("long型占"+Long.SIZE/8+"个字节,默认值 ="+l);
System.out.println("byte型占"+Byte.SIZE/8+"个字节,默认值 ="+b);
System.out.println("float型占"+Float.SIZE/8+"个字节,默认值 ="+f);
System.out.println("double型占"+Double.SIZE/8+"个字节,默认值 ="+d);
System.out.println("char型占"+Character.SIZE/8+"个字节,默认值 ="+ch);
System.out.println("boolean型"+"默认值 ="+bool);
}
}
运行结果如下:
引用型则有数组[ ]、类class 以及接口interface 三种类型,由用户自定义。
OK,简单介绍完Java的两大数据类型,下面我们来说一下,传值和传址到底有什么不同。
讲重点
首先,我们要知道,Java中定义一个变量,这个变量会存放在哪里,堆中,栈中,还是哪里?
首先,基本数据类型、数据的引用变量,都存放在栈中,而new 出来的对象(包括数组,集合等)则存放在堆中。
当我们定义一个变量时,Java就在栈中开辟一块空间,用来存储它的值,基本数据类型的值,就是它所定义的值,而引用变量的值其实是地址;当我们new 一个对象时,Java会在堆中开辟一块空间,并给它分配一个地址值,这个地址值通常都会赋值给它的引用变量,所以说:引用变量的值就是地址。当我们调用一个函数时,其实都是把实参的值传给形参,只不过引用变量的值是地址,所以就变成传址,本质上就是传值。
但是呢,基本类型的包装类和String 类特殊 , 它们的值就是值,而不是地址。