1. Answer
String不是基本数据类型,是引用数据类型。
2. 分析
2.1 Java中有哪些数据类型
Java语言是强类型语言(所有变量必须先定义后使用),对于每一种数据都给出了明确的数据类型,不同的数据类型也分配了不同的内存空间,所以它们表示的数据大小也是不一样的。
1)数据类型的分类
2)基本数据类型内存占用和取值范围
数据类型 | 关键字 | 内存占用(单位:字节byte) | 取值范围 | 默认值 |
整数 | byte | 1 | -128~127 | 0 |
short | 2 | -32768~32767 | 0 | |
int | 3 | -2的31次方到2的31次方-1 | 0 | |
long | 8 | -2的63次方到2的63次方-1 | 0L | |
浮点数 | float | 4 | 负数:-3.402823E+38到-1.401298E-45 正数:1.401298E-45到3.402823E+38 |
0.0f |
double | 8 | 负数:-1.797693E+308到-4.9000000E-324 整数:4.9000000E-324到1.797693E+308 |
0.0d | |
字符 | char | 2 | 0~65535 |
'u00000' |
布尔 | boolean | 1 | true、false | false |
说明:E+38表示是乘以10的38次方;同理E+45表示是乘以10的45次方
3)引用数据类型
在Java中除了8种基本数据类型外,其他数据类型全部都是引用(reference)数据类型,Java语言的引用数据类型,其实就相当于C语言中的指针类型,引用事实上就是指针,它是指向一个对象的内存地址。而引用数据类型变量中所存储的就是这个内存地址。引用数据类型用来表示复杂数据类型,常见的引用数据类型有:类、接口、数组、枚举等。
例如:String类就是引用数据类型
2.2 基本数据类型和引用数据类型的区别
1)存储位置
基本数据类型:在方法中定义的非全局基本数据类型变量的具体内容是存储在栈内存中的;
引用数据类型:只要是引用数据类型变量,其具体内容都是存放在堆内存中的,而栈中存放的其实是具体内容所在内存的地址;我们通过变量地址就可以找到变量的具体内容,例如通过门牌号就能找到房间一样。
public class Test{
public static void main(String[] args){
//定义基本数据类型变量
int i=1;
double d=8.8;
//定义引用数据类型变量
String str="Heollo World";
}
}
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);
}
}