0

0

Java基础的String类

ringa_lee

ringa_lee

发布时间:2017-06-22 16:45:17

|

1730人浏览过

|

来源于php中文网

原创

一、string 类代表字符串

Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:

  1

String str = "abc";

等效于: 

立即学习Java免费学习笔记(深入)”;

char data[] = {'a', 'b', 'c'}; 2 String str = new String(data);

下面给出了一些如何使用字符串的更多示例:

1 System.out.println("abc");2      String cde = "cde";3      System.out.println("abc" + cde);4      String c = "abc".substring(2,3);5      String d = cde.substring(1, 2);

String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。大小写映射基于Character类指定的 Unicode 标准版。

Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。有关字符串串联和转换的更多信息,请参阅 Gosling、Joy 和 Steele 合著的 The Java Language Specification。

除非另行说明,否则将 null 参数传递给此类中的构造方法或方法将抛出空指针异常。

String 表示一个 UTF-16 格式的字符串,其中的增补字符由代理项对表示。索引值是指 char 代码单元,因此增补字符在 String 中占用两个位置。

String 类提供处理 Unicode 代码点(即字符)和 Unicode 代码单元(即 char 值)的方法。

二、字符串的创建方式

 1 String s="abc"; 

表示,先在栈上创建一个引用s ,它会先去常量池中看有没有 "abc" 这个常量,如果有,则把s指向常量池中的 "abc"。

如果没有,则在常量池中创建 abc,

 1 String s=new String("abc");

相当于 String obj="abc";  String s=new String(obj) ; 经过这个操作以后,内存中有两份数据: 常量池中一份,堆上一份。由于有了 new 这个操作,不管常量池中原来有没有 "abc" ,它都会在堆上创建一份

三、字符串的比较

例1:字符串常量池的使用

1 String s0 = "abc"; 
2 String s1 = "abc"; 
3 System.out.println(s0==s1); //true 
4 //s0  和  s1 都指向了常量池中的同一个 "abc"

例2:String中 == 与equals的区别

1 String s0 =new String ("abc");   //new 这个操作,将在堆上产生对象,s0指向了堆2 String s1 =new String ("abc"); 
3 System.out.println(s0==s1); //false  s0 和 s1 指向的是堆上不同de的对象System.out.println(s0.equals(s1)); //true 因为String类重写了equals方法,比的是实体的内容

例3:编译期确定

1 String s0="helloworld";2 String s1="helloworld";3 String s2="hello" + "world";   //编译的时候,直接就编译成了 helloworld4 System.out.println( s0==s1 );   //true5 System.out.println( s0==s2 );   //true

例4:编译期无法确定

1 String s0="helloworld";2 String s1=new String("helloworld");3 String s2="hello" + new String("world");4 System.out.println( s0==s1 ); //false  一个指向常量池,一个指向堆System.out.println( s0==s2 ); //false5 System.out.println( s1==s2 ); //false

例5:编译期优化

 1 String s0 = "a1"; 2 String s1 = "a" + 1; 3 System.out.println((s0 == s1)); //true 4                    5 String s2 = "atrue"; 6 String s3= "a" + "true"; 7 System.out.println((s2 == s3))  //true 8                    9 String s4 = "a3.4";10 String s5 = "a" + 3.4;11 System.out.println((s4 == s5));  //true

例6 编译期无法确定

1 String s0 = "ab";2 String s1 = "b";3 String s2 = "a" + s1;   //s1不是常量,编译期无法确定4 System.out.println((s0 == s2)); //false

例7:编译期确定

1 String s0 = "ab";2 final String s1 = "b";     //加上final 就变成了常量3 String s2 = "a" + s1;  //对于两个常量相加,编译器能确定它的值4 System.out.println((s0 == s2));     //true

四、String对象内存分析

//例一

String a = "abc"; ①  

String b = "abc"; ② 

蓝色大气家电商城网站源码
蓝色大气家电商城网站源码

蓝色大气家电商城网站源码,具有适合家电商城的设计风格,预装了基础模块,企业招聘模块,留言反馈模块,会员功能模块,网友点评模块,新闻文章模块,网上购物模块,积分换赠模块等功能模块。具有商品分类、品牌管理、商品管理、支付方法设置、配送方法设置、会员类型设置、会员账户管理、会员积分管理、订单管理、订单统计、销售统计、商品搜索、商品分类查询、商品品牌查询、商品订购、在线支付、商品评论等B2C电子商务功能;

下载

分析:

①代码执行后在常量池(constant pool)中创建了一个值为abc的String对象,

②执行时,因为常量池中存在 "abc" 所以就不再创建新的String对象了。

//例二

String   c   =   new   String("xyz");①  

String   d   =   new   String("xyz");②  

分析:

①Class被加载时,"xyz"被作为常量读入,在常量池(constant pool)里创建了一个共享的值为"xyz"的String对象;

然后当调用到new String("xyz")的时候,会在堆(heap)里创建这个new   String("xyz")对象;

②由于常量池(constant pool)中存在"xyz"所以不再创建"xyz",然后创建新的new String("xyz")。

//例三

String   s1   =   new   String("xyz");     //创建二个对象(常量池和堆中),一个引用   

String   s2   =   new   String("xyz");     //创建一个对象(堆中),并且以后每执行一次创建一个对象,一个引用   

String   s3   =   "abc";     //创建一个对象(常量池中),一个引用     

String   s4   =   "abc";     //不创建对象(共享上次常量池中的数据),只是创建一个新的引用s4)

//例四

 public static void main(String[] args) {    
 //以下两条语句创建了1个对象。"凤山"存储在字符串常量池中     3 String str1 = "凤山";    
 String str2 = "凤山";     
 System.out.println(str1==str2);//true     
 //以下两条语句创建了3个对象。"天峨",存储在字符串常量池中,两个new String()对象存储在堆内存中      7 String str3 = new String("天峨");     
 String str4 = new String("天峨");     
 System.out.println(str3==str4);//false      
//以下两条语句创建了1个对象。9是存储在栈内存中   //这里所说的一个对象,是指的9 , i 和 j 则是对9的引用  11 int i = 9;     
int j = 9;     
System.out.println(i==j);//true      
//由于没有了装箱,以下两条语句创建了2个对象。两个1对象存储在堆内存中    15 Integer l1 = new Integer(1);    注意这里是没有装箱操作的16 Integer k1 = new Integer(1);    
System.out.println(l1==k1);//false  18  //以下两条语句创建了1个对象。1对象存储在栈内存中。自动装箱时对于值从127之间的值,使用一个实例。    19 Integer l = 20;//装箱     20 Integer k = 20;//装箱     21 System.out.println(l==k);//true    22 Integer i1 = 256;     //以下两条语句创建了2个对象。i1,i2变量存储在栈内存中,两个256对象存储在堆内存中   23 Integer i2 = 256;     
System.out.println(i1==i2);//false  25 }

五、String 类常见操作

字符串的常见操作,大致有以下几类    获取,判断,转换,替换和切割

1) 获取类操作   

String str="春花秋月何时了,往事知多少?小楼昨夜又东风,故国不堪回首月明中";

1 这个字符串到底有多长

2 第4个字是什么  即根据索引获取字符   

3 第一个逗号是第几个字符 即根据字符取索引( 取字符(或字符串)的位置)

4 最后一个“月”字的索引

5 是否含有“月明”  这个字符序列

6 是不是以"春花"开头,是否以“月明中”结尾

7 这个串是否为空

8 是否和另一个串相等

String str="春花秋月何时了,往事知多少?小楼昨夜又东风,故国不堪回首月明中";
System.out.println("长度:" + str.length());  //31
System.out.println("第四个字是"+str.charAt(3)); //月
System.out.println("第一个逗号的位置是"+str.indexOf(',')); //7
System.out.println("第一个逗号的位置是"+str.indexOf(",")); //7
System.out.println("第一个往事的位置是"+str.indexOf("往事")); //8
System.out.println("最后一个月字的索引"+str.lastIndexOf("月")); //28
System.out.println("是否含有月明"+str.contains("月明"));  //true
System.out.println("是否以春花开头"+str.startsWith("春花"));  //true
System.out.println("是否以月明中结尾"+str.endsWith("月明中"));  //true
System.out.println("是否为空"+str.isEmpty());  //false
System.out.println(str.equals("另一个字符串")); //false
String s1="abc";
String s2="aBC";
System.out.println(s1.equalsIgnoreCase(s2));  //true  equalsIgnoreCase 比较的时候忽略大小写。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
深入剖析redis教程
深入剖析redis教程

共55课时 | 8万人学习

Redis中文开发手册
Redis中文开发手册

共0课时 | 0人学习

麦子学院深入浅出 redis 视频教程
麦子学院深入浅出 redis 视频教程

共20课时 | 4.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号