Java数据类型以及区别
- 一, 数据类型
- 1.基础类型
- 2.引用类型
- 二,基本数据类型和引用数据类型的区别
- 1. 存储位置
- 2. 传递方式
- 个人如何选择使用
一, 数据类型
1.基础类型
JAVA中一共有八种基本数据类型,分别是:byte、short、int、long、float、double、char、boolean。
1、byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
2、short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
3、int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
4、long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
5、float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
6、double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
7、boolean:只有true和false两个取值。
8、char:16位,存储Unicode码,用单引号赋值。
2.引用类型
1.引用类型 由类型的实际值引用(类似于指针)表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(或“指向”)原始值。不创建任何副本。
2.引用数据类型非常多,大致包括:
类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
例如,String类型就是引用类型。
ps:其实除了基本数据类型之外,其他的都可以称为引用类型
二,基本数据类型和引用数据类型的区别
1. 存储位置
基本数据类型
在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的
引用变量类型
只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
ps:**通过变量地址可以找到变量的具体内容,就如同通过房间号可以找到房间一般**
public class Main{
public static void main(String[] args){
//基本数据类型
int i=1;
double d=1.2;
//引用数据类型
String str="helloworld";
}
}
2. 传递方式
基本变量类型
在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递的
//基本数据类型作为方法参数被调用
public class Main{
public static void main(String[] args){
int msg = 100;
System.out.println("调用方法前msg的值:\n"+ msg); //100
fun(msg);
System.out.println("调用方法后msg的值:\n"+ msg); //100
}
public static void fun(int temp){
temp = 0;
}
}
引用变量类型
引用数据类型变量,调用方法时作为参数是按引用传递的
//引用数据类型作为方法参数被调用
class Book{
String name;
double price;
public Book(String name,double price){
this.name = name;
this.price = price;
}
public void getInfo(){
System.out.println("图书名称:"+ name + ",价格:" + price);
}
public void setPrice(double price){
this.price = price;
}
}
public class Main{
public static void main(String[] args){
Book book = new Book("Java开发指南",66.6);
book.getInfo(); //图书名称:Java开发指南,价格:66.6
fun(book);
book.getInfo(); //图书名称:Java开发指南,价格:99.9
}
public static void fun(Book temp){
temp.setPrice(99.9);
}
}
调用时为temp在栈中开辟新空间,并指向book的具体内容,方法执行完毕后temp在栈中的内存被释放掉
个人如何选择使用
- 如果要表示整数就使用int,表示小数就使用double;
- 如果要描述日期时间数字或者表示文件(或内存)大小用long;
- 如果要实现内容传递或者编码转换使用byte;
- 如果要实现逻辑的控制,可以使用booleam;
- 如果要实现逻辑的控制,可以使用booleam;
- 如果按照保存范围:byte < int < long < double;