Java中String数据类型

本文详细解释了 Java 中 String 类型的特点,包括其在内存中的存储方式、如何判断字符串是否相等,以及常量池的概念。并通过具体示例说明了字符串字面量与 new 创建的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本数据类型包括byte、int、char、long、float、double、boolean和short。String不是基本数据类型
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类


转自:http://wangjc-opal.iteye.com/blog/232550

String是一个具有值类型和引用类型特点的特殊类型

常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。

Java代码  
  1. String s0 = "hello"; //这是在静态数据区创建了一个对象 
  2. String s1 = "hello";  //创建静态数据对象是先在静态数据区查,如果存在则不创建新的,保证静态数据区中的数据只有一份
  3. String s2 = "he" + "llo";  
  4. System.out.println(s0 == s1);// true  
  5. System.out.println(s0 == s2);// true  
  6. System.out.println(s0 == "hel" + "lo");  // true  

  

首先,我们要知道Java会确保一个字符串常量只有一个拷贝。

因为例子中的s0和s1中的”hello”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”he”和”llo”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中”hello”的一个引用。所以我们得出s0==s1==s2;

 

用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,放在堆里,它们有自己的地址空间。 
看例2:
 

Java代码  
  1. String s4 = "abc";     
  2. String s5 = new String("abc"); //在堆中创建一个对象,引用值当然不同    
  3. String s6 = "ab"new String("c");     
  4. System.out.println(s4 == s6);//false     
  5. System.out.println(s4 == s5);//false  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值