String 部分源码

学习笔记

package cn.jason.oop;
/*** 测试字符串类的基本语法*   不可变字符串* @author Jason**/
public class TestString {public static void main(String[] args){String str = "WorkHard";String str1 = new String("HardWork");String str2 = "123"+"456";String str3 = "18" + 19; //这里不是加法,是字符串连接符System.out.println(str3);if(str3 instanceof String){System.out.println("str3是字符串");}System.out.println("-------------------------------");String str10 = "jason";String str11 = "jason";String str12 = new String("jason");System.out.println(str10 == str11);System.out.println(str10 == str12);//str10 和 str12 不是同一个对象System.out.println(str10.equals(str12));//所以比较字符串时,使用equals较好}
}

在Java的内存分析中,我们会经常听到关于“常量池”的描述,实际上常量池也分了以下三种:

1. 全局字符串常量池(String Pool)

全局字符串常量池中存放的内容是在类加载完成后存到String Pool中的,在每个VM中只有一份,存放的是字符串常量的引用值(在堆中生成字符串对象实例)。

2. class文件常量池(Class Constant Pool)

class常量池是在编译的时候每个class都有的,在编译阶段,存放的是常量(文本字符串、final常量等)和符号引用。

3. 运行时常量池(Runtime Constant Pool)

运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中,也就是说,每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致。

String类是我们最常使用的类。字符串类的方法我们必须非常熟悉!我们列出常用的方法,请大家熟悉。

表1 String类的常用方法列表

【示例1】String类常用方法一

1

2

3

4

5

6

7

8

9

10

11

12

13

14

public class StringTest1 {

    public static void main(String[] args) {

        String s1 = "core Java";

        String s2 = "Core Java";

        System.out.println(s1.charAt(3));//提取下标为3的字符

        System.out.println(s2.length());//字符串的长度

        System.out.println(s1.equals(s2));//比较两个字符串是否相等

        System.out.println(s1.equalsIgnoreCase(s2));//比较两个字符串(忽略大小写)

        System.out.println(s1.indexOf("Java"));//字符串s1中是否包含Java

        System.out.println(s1.indexOf("apple"));//字符串s1中是否包含apple

        String s = s1.replace(' ''&');//将s1中的空格替换成&

        System.out.println("result is :" + s);

    }

}

执行结果如图1所示:

图1 示例1运行效果图

【示例2】String类常用方法二

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public class StringTest2 {

    public static void main(String[] args) {

        String s = "";

        String s1 = "How are you?";

        System.out.println(s1.startsWith("How"));//是否以How开头

        System.out.println(s1.endsWith("you"));//是否以you结尾

        s = s1.substring(4);//提取子字符串:从下标为4的开始到字符串结尾为止

        System.out.println(s);

        s = s1.substring(47);//提取子字符串:下标[4, 7) 不包括7

        System.out.println(s);

        s = s1.toLowerCase();//转小写

        System.out.println(s);

        s = s1.toUpperCase();//转大写

        System.out.println(s);

        String s2 = "  How old are you!! ";

        s = s2.trim();//去除字符串首尾的空格。注意:中间的空格不能去除

        System.out.println(s);

        System.out.println(s2);//因为String是不可变字符串,所以s2不变

    }

}

执行结果如图2所示:

图2 示例2运行效果图

Java String类和常量池相关推荐

  1. java的知识点15——String基础、String类和常量池、String类常用的方法、字符串相等的判断、组合模式

    String基础 1. String类又称作不可变字符序列. 2. String位于java.lang包中,Java程序默认导入java.lang包下的所有类. 3. Java字符串就是Unicode ...

  2. 常量池在堆还是方法区_详解Java 虚拟机(第③篇)——String 类和常量池

    一.String 对象的两种创建方式 String str1 = "abcd"; String str2 = new String("abcd"); Syste ...

  3. java --String类解决面试问题

    2019独角兽企业重金招聘Python工程师标准>>> 1.概述 字符串对象是一种特殊的对象.String类是一个不可变的类..也就说,String对象一旦创建就不允许修改 Stri ...

  4. Java中几种常量池的区分

    转载自  Java中几种常量池的区分 在java的内存分配中,经常听到很多关于常量池的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不多理清了,很多网上 ...

  5. Java——String类的方法

    Java--String类的方法 String str1 = "abc" 与String str2 = new String("abc")有什么区别? 字符串常 ...

  6. java讲对象放在常量池的方法_java的常量池里面都放了些神马东西

    展开全部 理解Java常量池 JVM运行时数据区的内e69da5e6ba9062616964757a686964616f31333264656233存模型由五部分组成: [1]方法区 [2]堆 [3] ...

  7. String:字符串常量池

    一.设计思想   为字符串开辟一个字符串常量池,创建字符串常量时,首先检测字符串常量池是否存在该字符串.如存在该字符串对象,返回其引用:若不存在,实例化该字符串并放入常量池中,并返回其引用. 二.实现 ...

  8. Java String类概述

    Java String类 String类简介 字符串比较 String对象(常量)池 静态常量池 运行时常量池 String类简介 字符串严格意义上来讲并不能算是一个基本数据类型,也就是说没有任何一门 ...

  9. 黑马程序员——Java String类 and 正则表达式(第七篇)

    -----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 虽然老毕视频中把正则表达式放到了最后面才讲,但个人认为他和String功能上有些 ...

最新文章

  1. web高性能开发系列随笔
  2. EelemntUI中e-form表单校验的使用以及表单校验的规则
  3. 分布式监控系统Zabbix3.2添加自动发现磁盘IO并注册监控
  4. Mysql(1)——服务端与客户端建立连接
  5. .NET环境下每日集成(4):CruiseControl.Net配置注意事项
  6. 微信web-view 开发_在不到7个月的时间里我如何成为一名Web开发人员-以及如何
  7. 【Python】EXCEL转Json
  8. php设置 url长度,URL长度有限制吗?_PHP教程
  9. JDK的发布周期缩短,JDK9,JDK10是短期版本
  10. MYSQL时间函数之NOW()
  11. 红米NOTE3 双网通(2015617)刷机包 解账户锁
  12. bk-02 C++ vector用法 博客园
  13. linux内核源码系统调用有多少个,Linux内核源码目录介绍
  14. 1.1.26 word内容导入PPT
  15. JS:关于邮箱的正则表达式及规则
  16. VOT-toolkit Python 版本使用教程--官方样例版
  17. java 校验ipv6_基于Java检查IPv6地址的合法性
  18. 【MySQL学习】事务管理
  19. PMP中的那些进度/成本图
  20. 06.01、js之日期获取方法-年月日时分秒毫秒星期

热门文章

  1. debian的几个lib源_Debian源
  2. 内网如何架设传奇世界私服 (包含传送,脚本教程,专用怪物,不定期更新)...
  3. PCI EXPRESS体系结构导读(读书笔记)
  4. win8计算机背景黑色,Win8电脑桌面背景突然变黑的解决方法
  5. android studio 生成签名文件
  6. 小猪躺着大猪跑(博弈论的诡计)
  7. 网络安全毕业设计题目大全
  8. 百度小程序服务器偶尔一个请求失败,干货分享|百度智能小程序审核发布失败常见原因汇总...
  9. 处理手机点击淘宝优惠链接提示“目标地址不可达”错误
  10. 谷歌的秘密招聘挑战,你可否与之一战?