JAVA中的String类,不管是日常开发,或者是面试,都是常用的类之一,所以写在这里也为为了总结,方便以后的查阅与复习.

  特点: 1.Java中所有的类中,String是使用最多的一个类

    2.是一个final类,不允许被继承

    3.表示字符串常量;

    4.它们的值在创建之后不能改变。

    5.因为 String 对象是不可变的,所以可以共享它们。

  内存分析:

  栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中),就是说

栈中放对象名或者基本数据类型.

  堆(heap):存放所有new出来的具体对象。
  常量池(constant pool):在堆中分配出来的一块存储区域,存放储显式的String常量和基本类型常量(float、int等)。另外,可以存储不经常改变的东西(public static final)。常量池中的数据可以共享。
             字符串池是堆中的一个特殊的区域,专用用来存储String类型的字符串,每次使用字符串的字面值时,例如 String s=“hello”;,先去字符串池中查找,如果找到,返回这个对象的引用,如果找不到,则在池中创建一个新的字符串,并返回此引用。
  静态存储:存放静态成员(static定义的)。
  堆和栈的区别:
    栈用的是一级缓存,调用完立即释放,系统自动控制.
    堆用的是二级缓存,由垃圾回收机制来管理.
       举个例子:
String a="aa";创建两个对象,一个是在栈中创建a对象名,另一个在堆创建aa的String对象
String b="aa";创建一个对象,常量池中已有aa的String对象,所以直接在栈中创建了b对象名对堆的"aa"进行共享引用
String str1=new String("cc"); 创建两个对象,一个在栈中创建str1对象名,另一个在常量池中创建cc的String对象

常用方法:

public class StringDemo {
public static void main(String [] args){//String类常用方法:
String str1="this is method about String";
System.out.println("返回字符串长度:"+str1.length());
System.out.println("提取指定位置索引1位开始"+str1.substring(1));
System.out.println("提取指定位置索引5位开始索引19位结束:"+str1.substring(5,19));
System.out.println("查找字符串:"+str1.indexOf("s"));
System.out.println("指定位置提取单个字符:"+str1.charAt(0));
System.out.println("返回一个前后不含任何空格的调用字符串的副本:"+str1.trim());
System.out.println("判断字符串是否以指定的前缀结尾:"+str1.endsWith("this"));
System.out.println("判断字符串是否以指定的前缀开头:"+str1.startsWith("Demo"));
System.out.println("连接两个字符串,并新建一个包含调用字符串的字符串对象:"+str1.concat("world"));
System.out.println("比较字符串:"+str1.equals("this is String Demo"));
System.out.println("将调用字符串中出现某个字符的所有位置都替换为另一个字符:"+str1.replace("this", " "));
System.out.println("全部转换为大写"+str1.toLowerCase());
System.out.println("全部转换成小写"+str1.toUpperCase()); //String类与基本数据类型的转换
String str2=new String("this is String world");
//int in1=Integer.parseInt(str2);//String 转 int
//double dou1=Double.parseDouble(str2);//Stirng 转 double
//boolean bool1=Boolean.parseBoolean(str2);//String 转boolean 感觉无意义~ //基本数据类型与String的转换
int in2=2;
double do2=3;
long lo2=4;
float f=5;
boolean b=true;
Object object="helo";
String str3=new String();
str3.valueOf(in2);//int 转 String
str3.valueOf(do2);//double 转 String
str3.valueOf(lo2);//long 转 String
str3.valueOf(f);//float 转 String
str3.valueOf(b);//Boolean 转 String
str3.valueOf(object);//object 转 String //String类 与 list的相互转换
List<String> list2=new ArrayList<String>();
list2.add("a");
list2.add("b");
list2.add("c");
String s=String.join(",",list2);//list 转 String
System.out.println(s); String abc ="a,b,c";
String [] arr =abc.split(",");
List<String> list=java.util.Arrays.asList(abc);//String 转 list
System.out.println(list);

String总结:

  String 类并不是 java的基本数据类型。String 类是java.lang下所提供的类。

  在java 中使用字符串最重要的一个规则必须记住,一个字符串对象一旦被创建,它的内容就是固定不变的
  String str=”Hello”;

  这个声明会创建一个长度为5,内容为Hello的字符串对象,你无法改变这个字符串对象的内容。

  String
str=”Hello”;
    str = “HelloWorld”;
  不要以为这样就改变了字符串对象的内容,事实上。上面那段代码中产生了两个字符串对象,一个是Hello字符串对象,长度为5;一个是HelloWorld字符串对象,长度为10,两个不同的字符串对象。你不是在Hello字符串后面加上World字符串,而是让str 引用名称从新引用HelloWorld字符串,而不在引用Hello字符串但Hello字符串在内存中还是存在的。

  一个String
对象的长度是固定的,不能改变它的内同或者是附加新的字符到String 对象中。你也许会使用+来连接字符串达到附加新字符或字符串的目的。但会产生一个新String 实例。如果程序对这种附加字符串的需求很频繁,会消耗很大资源。

Java---String总结的更多相关文章

  1. 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念

    转(http://www.codeceo.com/article/java-string-ansi-unicode-bmp-utf.html#0-tsina-1-10971-397232819ff9a ...

  2. Java String.split()小点

    java String.split(); 别的不说,单说其中一个问题,这个函数去切分空字符串时,得到的结果: public static void main(String[] args) {// St ...

  3. Java总结篇系列:Java String

    String作为Java中最常用的引用类型,相对来说基本上都比较熟悉,无论在平时的编码过程中还是在笔试面试中,String都很受到青睐,然而,在使用String过程中,又有较多需要注意的细节之处. 1 ...

  4. java String.split()函数的用法分析

    java String.split()函数的用法分析 栏目:Java基础 作者:admin 日期:2015-04-06 评论:0 点击: 3,195 次 在java.lang包中有String.spl ...

  5. java string类型的初始化

    以下基本上是java string类型最常用的三种方法 new string()就不介绍了  基本等同于第三种 String a;  申明一个string类型的 a,即没有在申请内存地址,更没有在内存 ...

  6. Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  7. Java String类详解

    Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...

  8. java string,需要进行首字母大写改写

    java string,需要进行首字母大写改写,网上大家的思路基本一致,就是将首字母截取,转化成大写然后再串上后面的,类似如下代码 //首字母大写     public static String c ...

  9. Java String Class Example--reference

    reference:http://examples.javacodegeeks.com/core-java/lang/string/java-string-class-example/ 1. Intr ...

  10. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

随机推荐

  1. 如何成为一个javascript高手【转载】

      原文网址: http://www.cnblogs.com/keva/p/how-to-become-a-javascript-badass.html 英文网址:http://www.clientc ...

  2. css媒体查询:响应式网站

    css媒体查询:响应式网站 媒体查询 包含了一个媒体类型和至少一个使用如宽度.高度和颜色等媒体属性来限制样式表范围的表达式.CSS3加入的媒体查询使得无需修改内容便可以使样式应用于某些特定的设备范围. ...

  3. 项目实战3—Keepalived 实现高可用

    实现基于Keepalived高可用集群网站架构 环境:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展,后端 ...

  4. [认证授权] 5.OIDC(OpenId Connect)身份认证授权(扩展部分)

    在上一篇[认证授权] 4.OIDC(OpenId Connect)身份认证授权(核心部分)中解释了OIDC的核心部分的功能,即OIDC如何提供id token来用于认证.由于OIDC是一个协议族,如果 ...

  5. Linux命令学习备忘

    格式:   命令:原理:实践及截图 1.su <user> 执行该命令,需要输入password,它是<user>中定义的用户的password,即,要变换成的用户的passw ...

  6. 使用Docker跑MySQL 作为Django的存储后端

    Docker的好处不科普了,用过的都说好. 不想污染自己开发机器上的文件环境,本萌新使用Docker运行Mysql,Redis来作为Django的存储后端和缓存. 在第一次安装过程中,我遇到了一些问题 ...

  7. [转]Oracle 索引质量分析

    http://blog.csdn.net/leshami/article/details/23687137 索引质量的高低对数据库整体性能有着直接的影响.良好高质量的索引使得数据库性能得以数量级别的提 ...

  8. C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】

    一.引言   今天我们开始讲"行为型"设计模式的第三个模式,该模式是[迭代器模式],英文名称是:Iterator Pattern.还是老套路,先从名字上来看看."迭代器模 ...

  9. 基于Flink秒级计算时CPU监控图表数据中断问题

     基于Flink进行秒级计算时,发现监控图表中CPU有数据中断现象,通过一段时间的跟踪定位,该问题目前已得到有效解决,以下是解决思路:   一.问题现象       以SQL02为例,发现本来10秒一 ...

  10. RaspberryPi2B使用bcm2835c库控制GPIO

    RaspberryPi2B使用bcm2835c库控制GPIO 网上有很多RaspberryPi控制GPIO的方法,有Python.WiringPi.bcm2835 C library 使用bcm283 ...