基础知识模块:

参考以下博客,写得很好,深入分析了String,需要重点掌握

http://www.tiantianbianma.com/java/java-basic/page/3/

http://www.cnblogs.com/xiaoxi/p/6036701.html

常用的api方法:

http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

具体的说明可参考上面官方给的api说明,结合开发时使用

例子如下:

以下简单列举了一些,结合应用场景去使用,未提到的可以去查看上面官方的api

package test;

public class test4 {
public static void main(String[] args) {
//常用的创建字符串方法
String str1 = new String("abcdefg1111");
String str2 = "abcdefg1111";
String str3="igklmn"; //1.字符串比较==与.equals区别,返回值都是Boolean型
System.out.println(str1==str2);
System.out.println(str1.equals(str2)); //2.掌握字符串拼接(+与contact()方法)与字符串长度(返回int型)
System.out.println(str1+"----"+str2);
System.out.println(str1.concat(str3)); //contact()将指定的字符串拼接到末尾
System.out.println(str1.length()); //3.掌握字符串截取(subString)与替换(replace,replaceAll)与subsequence()
System.out.println(str1.substring(1));
System.out.println(str1.substring(0, 5)); //包左不包右
System.out.println(str2.subSequence(0, 5)); //subStrig返回的是子字符串,subSequence返回的是子序列,是一组新的字符序列
System.out.println(str1.replace('1', '2'));
System.out.println(str2.replaceAll("1", ""));
System.out.println(str2.replaceFirst("1", "2")); //4.掌握String.valueof(),trim()方法,charAt()方法
String str4 = " www.baidu.com ";
int a= 123;
System.out.println(String.valueOf(a)); //返回去掉头尾空格的字符串
System.out.println(str4.trim()); //返回去掉头尾空格的字符串
System.out.println(str4.charAt(3)); //返回索引位置的字符,索引范围0到length-1 //5.掌握字符串大小写转换与忽略大小写的比较
String str5 = "AAbb";
String str6 = "aabb";
System.out.println(str5.toLowerCase());
System.out.println(str5.toUpperCase());
System.out.println(str5.equalsIgnoreCase(str6)); }
}

摘抄:

以下为从第一个标题摘抄下来的笔记,具体的分析看链接(果真在源码面前没有任何秘密可言)

1)String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。

2)上面列举出了String类中所有的成员属性,从上面可以看出String类其实是通过char数组来保存字符串的。

从上面的三个方法可以看出,无论是sub操作、concat还是replace操作都不是在原有的字符串上进行的,而是重新生成了一个新的字符串对象。也就是说进行这些操作后,最原始的字符串并没有被改变。

在这里要永远记住一点:“String对象一旦被创建就是固定不变的了,对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象”

3):字符串常量池的概念:类似于数据库连接池的概念,由于字符串操作是非常非常常见的,在分配对象的时候是需要消耗高昂的空间和资源。

JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池每当我们创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中。由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串(这点对理解上面至关重要)

Java中的常量池,实际上分为两种形态:静态常量池运行时常量池
所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。
运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池

java中的String整理的更多相关文章

  1. Java中的String,StringBuilder,StringBuffer三者的区别

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  2. Java中的String,StringBuilder,StringBuffer三者的区别(转载)

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  3. Java 中的 String 真的是不可变吗?

    我们都知道 Java 中的 String 类的设计是不可变的,来看下 String 类的源码. public final class String implements java.io.Seriali ...

  4. 转:Java中的String,StringBuilder,StringBuffer三者的区别

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  5. [转载]Java中的String,StringBuilder,StringBuffer三者的区别

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  6. 【转】Java中的String,StringBuilder,StringBuffer三者的区别

    https://www.cnblogs.com/su-feng/p/6659064.html 最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及String ...

  7. Java中的String,StringBuilder,StringBuffer三者的区别(转发:https://www.cnblogs.com/su-feng/p/6659064.html)

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  8. Java内存管理-探索Java中字符串String(十二)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 一.初识String类 首先JDK API的介绍: public final class String extends O ...

  9. 再解java中的String

    今天看到一篇文章中,写了关于java中的String.我看了后,是我从学java来觉得是最好的一篇关于String类的文章.看了这篇文章你就会对String的认识会提高一个层次.故将原作者的文章特意转 ...

随机推荐

  1. 网络协议 2 - IP 是怎么来,又是怎么没的?

    了解完网络协议,我们会发现,网络通信的五层模型里,有两个很重要的概念:IP 地址和 MAC 地址. 那么 IP 地址是怎么来的,又是怎么没的?MAC 地址与 IP 地址又有什么区别? 这回答上面问题前 ...

  2. knockoutjs 上自己实现的flux

    在knockoutjs 上实现 Flux 单向数据流 状态机,主要解决多个组件之间对数据的耦合问题. 一.其实简单 flux的设计理念和实现方案,很大程度上人借鉴和参考了Vuex的实现,只是简化了某些 ...

  3. 使用npm安装配置vue

    npm安装很慢(国外服务器),所以一般推荐使用npm淘宝镜像cnpm,先安装下cnpm: npm install -g cnpm --registry=https://registry.npm.tao ...

  4. SpringCloud系列十二:SpringCloudSleuth(SpringCloudSleuth 简介、SpringCloudSleuth 基本配置、数据采集)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringCloudSleuth 2.具体内容 Sleuth 是一种提供的跟踪服务,也就是说利用 sleuth 技术 ...

  5. 从0打卡leetcode之day 6--最长回文串

    题目描述 给定一个字符串 s,找到 s中最长的回文子串.你可以假设 s 的最大长度为1000. 示例1 输入: "babad" 输出: "bab" 注意: &q ...

  6. Django中的templates(你的HTML页面放哪里)

    本文回答Django里面的HTML文件应该怎么放,以及Django是如何查找模板文件的. 到目前为止我们没有使用HTML页面,在之前的说明中所有内容都是写死在程序里的,如果你想改变内容就要修改代码.但 ...

  7. 设计模式总结篇系列:工厂方法模式(Factory Method)

    工厂方法模式适合于对实现了同一接口或继承了同一父类的一些类进行实例的创建.一般是通过定义一个工厂类,并在其方法中实现对具有上述特点的类对象的创建. 根据具体产生类对象的方法定义形式,又可以将其分为普通 ...

  8. Oracle闪回表

    Oracle闪回技术 场景:测试环境数据库的表数据被误删除. 解决思路:使用闪回表技术 原理 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小 ...

  9. Java开发笔记(四十一)日历工具Calendar

    前面的文章提到,Date是Java最早的日期工具,估计当时的设计师是个技术宅男,未经过充分调研就拍脑袋写下了Date的源码,造成该工具存在先天不足,比如getYear方法返回的不是纯正的公元纪年.ge ...

  10. Java 内存模型 JMM 浅析

    JMM简介 Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性.是否可以重排序等问题的无关具体平台的统一的保证.(可能在术语上与Java ...