登陆 注册

java中string到底是什么数据类型?

守望者 2020-03-28 361人围观 ,发现0个评论 java

       java中string字符串到底是基本数据类型还是引用数据类型,咱们有必要好好研究一下。

 首先,咱先温习一下java中的数据类型的分类有哪些,如下图所示:

QQ截图20200328094014.png

 从图中可以看到java中的八大基本数据类型中并没有把string字符串列入其中,那么有人就会认为,”既然string不是基本数据类型那么就是引用数据类型了”,

这是目前主流的观点,这种说法也可以说对,但并不完全对,更准确的说,这种说法具有片面性,并没有全面认识到string类型。


在研究string属于基本数据类型还是引用数据类型之前,我们有必要先搞清楚二者的区别与特征,而后才可以据此判断。


java中基本数据类型存储在栈内存中,并且使用了常量池共享内存以实现高效节约系统资源;

而引用数据类型主要指java对象, 对象本身存储在堆内存中,每“new”一个对象则分配一个新的堆内存。


举例:如下两个基本类型变量 a ,b ,他们的值是一样的,因此指向同一块常量池内存中值为“1”的内存。

  int a = 1;
  int b = 1;
  System.out.println(a==b); // 判断两个变量内存地址是否一样,输出结果为“true”


而如下两个Object对象,尽管他们的内容是一样的,但是由于都会新开辟一块堆内存占用,所以地址并不一样:          

	   Object object1 = new Object();
	   Object object2 = new Object();
	   System.out.println(object1==object2);


实践是检验真理的唯一标准,用相似的方法我们再试试string类型便一目了然。


第一种定义:

       String aString = "a";
	   String bString = "a";
	   
	   
       System.out.println(aString==bString);  // 判断两个变量内存地址是否一样,输出结果为“true”

判断:从结果可以看出此时string是基本数据类型。


第二种定义:

       String cString = new String(aString);
       String dString = new String(bString);
	   
	
       System.out.println(cString==dString); // 判断两个变量内存地址是否一样,输出结果为“false”

判断:从结果可以看出此时string用了 "new" , 其实此时string已经变成了java对象,也就是引用数据类型。


综上所述,java中String字符串既可以是基本数据类型,也可以是引用数据类型,究竟是哪种,取决于string的声明定义方式。


  转载请注明本文链接:https://tufeng.xyz/java/32.html,谢谢合作!

请发表您的评论
请关注微信公众号
微信二维码