1、String属于基本数据类型吗
首先要明确的是,在Java中,String不是基本数据类型,它继承于Object,是一个jdk提供的字符串类。
了解基本数据类型看这里:java有哪8种基本数据类型2
但是,String和其他对象相比,jdk做了很多特殊的处理。体现在如下几个方面:
- String可以通过new构造对象,也可以直接赋值。例如:
String str = new String( "abc" );//第一种
String str = "abc" ;//第二种
- 第一种用new()来新建对象,它会在存放于堆中,每调用一次就会创建一个新的对象。
第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放”abc”,如果没有,则将”abc”存放进栈,并令str指 向”abc”,如果已经有”abc” 则直接令str指向”abc”。
了解java内存堆栈看这里:
- 第二种方式(String str1 =”abc”)创建多个”abc”字符串,在内存中其实只存在一个对象而已。这种方式节省内存空间,同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。
而对于String str = new String(“abc”)的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
- 比较类里面的数值是否相等时,用equals()方法;当比较两个引用变量是否指向同一个对象时,用==(可以理解为比较逻辑地址,实际是比较对象号)。 例如:
String str1 = "abc" ;
String str2 = "abc" ;
System.out.println(str1==str2);
运行结果:
true
可以看出str1和str2是栈中对象。
String str1 = new String ( "abc" );
String str2 = new String ( "abc" );
System.out.println(str1==str2);
运行结果:
false
了解String更多看这里:
时间: 2024-10-12 00:32:26