一、前言

1、String表示字符串类型,属于 引用数据类型,不属于基本数据类型。

2、在java中随便使用 双引号括起来 的都是String对象。


例如:“abc”,“def”,“hello world!”,这是3个String对象。


3、java中规定,双引号括起来的字符串,是 不可变 的,也就是说"abc"自出生到最终死亡,不可变,不能变成"abcd",也不能变成"ab"

4、在JDK当中双引号括起来的字符串,例如:“abc” "def"都是直接存储在“方法区”的“字符串常量池”当中的。

5、为什么SUN公司把字符串存储在一个“字符串常量池”当中呢?

因为字符串在实际的开发中使用太频繁。为了执行效率,所以把字符串放到了方法区的字符串常量池当中。

eg1.

public class StringTest01 {public static void main(String[] args) {// 这两行代码表示底层创建了3个字符串对象,都在字符串常量池当中。String s1 = "abcdef";String s2 = "abcdef" + "xy";// 分析:这是使用new的方式创建的字符串对象。这个代码中的"xy"是从哪里来的?// 凡是双引号括起来的都在字符串常量池中有一份。// new对象的时候一定在堆内存当中开辟空间。String s3 = new String("xy");}
}


eg2.

public class StringTest02 {public static void main(String[] args) {String s1 = "hello";// "hello"是存储在方法区的字符串常量池当中// 所以这个"hello"不会新建。(因为这个对象已经存在了!)String s2 = "hello";// == 双等号比较的是变量中保存的内存地址System.out.println(s1 == s2); // trueString x = new String("xyz");String y = new String("xyz");// == 双等号比较的是变量中保存的内存地址System.out.println(x == y); //false}
}

注意:
字符串对象之间的比较不能使用“== ”,"=="不保险。应该调用String类的equals方法。

eg3.

String k = new String("testString");
//String k = null;
// "testString"这个字符串可以后面加"."呢?
// 因为"testString"是一个String字符串对象。只要是对象都能调用方法。
System.out.println("testString".equals(k)); // 建议使用这种方式,因为这个可以避免空指针异常。
System.out.println(k.equals("testString")); // 存在空指针异常的风险。不建议这样写。

二、构造方法

构造方法名 eg.
String s = “xxx” 最常用
String(String original) String(“xxx”)
String(char数组)
String(char数组,起始下标,长度)
String(byte数组)
String(byte数组,起始下标,长度)
String(StringBuffer buffer)
String(StringBuilder builder)

eg.

class StringTest{public static void main(String[] args) {//最常用的方式String s1 = "我是中国人";System.out.println(s1);//我是中果人String s2 = new String("我是中国人");System.out.println(s2);//我是中果人char[] c = {'我' , '是', '中', '果', '人'};String s3 = new String(c);System.out.println(s3);//我是中果人String s4 = new String(c, 2, 3);System.out.println(s4);//中果人byte[] b = {65, 66 ,67, 68};String s5 = new String(b);System.out.println(s5);//ABCDString s6 = new String(b, 1, 2);System.out.println(s6);//BCStringBuffer sb1 = new StringBuffer("我是福建人");String s7 = new String(sb1);System.out.println(s7);//我是福建人StringBuilder sb2 = new StringBuilder("我是厦门人");String s8 = new String(sb2);System.out.println(s8);//我是厦门人}
}

三、方法

方法名 作用
char charAt(int index) 返回指定位置的字符
int compareTo(String anotherString) 比较两个字符串。相等返回0;前大后小返回1;前小后大返回-1
boolean contains(CharSequence s) 判断字符串是否包含s
boolean endsWith(String suffix) 判断字符串是否以suffix结尾
boolean equals(Object anObject) 判断两个串是否相等
boolean equalsIgnoreCase(String anotherString) 忽略大小写判断两个串是否相等
byte[] getBytes() 将字符串串变成字节数组返回
int indexOf(String str) 返回str在字符串第一次出现的位置
boolean isEmpty() 字符串是否为空
int length() 字符串长度
int lastIndexOf(String str) 返回str最后一次出现的位置
String replace(CharSequence target, CharSequence replacement) 用replacement替换字符串target的字符
String[] split(String regex) 将字符串以regex分割
boolean startsWith(String prefix) 判断字符串是否以prefix开始
String substring(int beginIndex) 从beginIndex开始截取字串
String substring(int beginIndex, int endIndex) 截取beginIndex到endIndex - 1的字符串
char[] toCharArray() 将字符串转换乘char数组
String toLowerCase() 字符串转小写
String toUpperCase() 字符串转大写
String trim() 去除字符串两边空格
静态方法
static String valueOf(int i) 将 i 转换成字符串

eg.

class StringTest{public static void main(String[] args) {String s1 = "hello world";System.out.println(s1.charAt(6));//wString s2 = "abc";String s3 = "xyz";String s4 = "xyz";System.out.println(s2.compareTo(s3));//-23System.out.println(s3.compareTo(s4));//0System.out.println(s4.compareTo(s1));//16System.out.println(s2.equals(s3));//falseSystem.out.println(s1.endsWith("world"));//trueSystem.out.println(s1.endsWith("t"));//falseString s5 = "HELLO worLD";System.out.println(s1.equalsIgnoreCase(s5));//truebyte[] b = s1.getBytes();System.out.println(Arrays.toString(b));//[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]System.out.println(s1.indexOf("world"));//6System.out.println(s1.indexOf("h"));//0System.out.println(s1.isEmpty());//falseSystem.out.println(s1.length());//11String s6 = "javapythonc++cphpjavapython";System.out.println(s6.lastIndexOf("java"));//17System.out.println(s6.lastIndexOf("h"));//24String s7 = "name=zhangsan&age=18&sex=男";String newS7 = s7.replace("&", ";");System.out.println(newS7);//name=zhangsan;age=18;sex=男String[] splitS7 = s7.split("&");System.out.println(Arrays.toString(splitS7));//[name=zhangsan, age=18, sex=男]System.out.println(s6.startsWith("java"));//trueSystem.out.println(s6.startsWith("python"));//falseSystem.out.println(s6.substring(10));//c++cphpjavapythonSystem.out.println(s6.substring(10, 13));//c++char[] charS6 = s6.toCharArray();System.out.println(Arrays.toString(charS6));//[j, a, v, a, p, y, t, h, o, n, c, +, +, c, p, h, p, j, a, v, a, p, y, t, h, o, n]System.out.println(s6.toUpperCase());//JAVAPYTHONC++CPHPJAVAPYTHONSystem.out.println(s5.toLowerCase());//hello worldString s8 = "           你 好 世 界                   ";System.out.println(s8.trim());//你 好 世 界System.out.println("------------------------------");System.out.println(String.valueOf(123));//123System.out.println(String.valueOf(3.14));//3.14System.out.println(String.valueOf(true));//trueSystem.out.println(String.valueOf(new Object()));//java.lang.Object@4554617c//valueOf会自动调用toString()方法}
}

注意:
1.为什么 System.out.println(引用) 会自动调用toString()方法?

因为println()会调用String.valueOf()方法而String.valueOf()会调用toString()方法

2.String byte数组 理解

byte[] b = new byte[1000000000];//有1000000000都是byte类型的

java String类(超详细!)相关推荐

  1. C++——String类超详细介绍

    (欢迎及时指正错误!谢谢) STL的含义:标准模板库 STL的内容: 容器:数据的仓库 算法:与数据结构相关的算法.通用的算法(和数据结构无关) 注:熟悉常用的算法 sort  reverse 迭代器 ...

  2. JAVA 正则表达式 (超详细,转)

    转 JAVA 正则表达式 (超详细,转) 2015年03月25日 10:27:57 阅读数:1514 在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍 ...

  3. Java基础-->一篇讲全Java常用类(详细易懂,建议收藏)

    Java基础–>一篇讲全Java常用类(详细易懂,建议收藏) 文章目录 Java基础-->一篇讲全Java常用类(详细易懂,建议收藏) 1.字符串相关的类 String类 概述 创建Str ...

  4. Java Scanner类的详细介绍(Java键盘输入)

    Java Scanner类的详细介绍(Java键盘输入) 一.Scanner类的简单使用 二.Scanner类的详细介绍 1.判断输入数据类型 2.next()与nextLine()的区别 3.求多个 ...

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

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

  6. Java——String类的方法

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

  7. java string.substring 参数,Java,String类中的subString()方法,stringsubstring

    Java,String类中的subString()方法,stringsubstring public class TestStringSubString { // main函数 public stat ...

  8. Java String类的相关操作

    Java String类的相关操作 一.如何遍历字符串 //法一 String str="hello world"; for(int i=0;i<str.length();i ...

  9. Java String类的split方法简介

    Java String类的split方法简介 String的split()方法用于按传入的字符或字符串对String进行拆分,返回拆分之后的数组. 1.一般用法 用一般的字符,例如 @ 或 , 等符号 ...

  10. Java String类概述

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

最新文章

  1. 机器学习中的集成学习模型实战完整讲解
  2. c语言字符串 数字转换函数大全
  3. Linux分支代码必须公开吗,linux – 当拉出不同的分支时,让“git pull”请求确认...
  4. 检查网口流量与前10名流量大IP
  5. 计算机网络路由选择协议,IP路由选择协议原理和作用
  6. JDBC连接 Mysql数据库
  7. 你尝试登录的服务器语言不通,七骑士国内服务器正式上线后,各种登录问题解决方案汇总...
  8. js控制scss的变量_web前端:js如何操作sass里的变量及calc 使用sass变量
  9. 5G iPhone若推迟至10月发布 将会拉低苹果两个财季营收
  10. thinkphp 随机取10条数据_spark调优-数据倾斜
  11. python函数降低编程复杂度_Python重构此函数,将其认知复杂度从19降低到允许的15...
  12. Oracle根底数据标准存储名目浅析(三)——日期标准(三)
  13. python内置函数zip
  14. 软件测试第五周 - 编码的 UI 测试
  15. VBA实战代码大全-下载
  16. 直接利用工具将prn文件打印到打印机的方法
  17. linux pe ef 详解,PE工具列表(看雪學院)
  18. T9智能输入法实现原理和步骤
  19. android killer 反编译工具,androidkiller反编译软件使用与踩坑并解决的过程
  20. 2019届秋季校园招聘总结

热门文章

  1. C#托盘控件notifyIcon的使用
  2. 关于高速光耦6n137的使用总结_高速光耦6N137用于RS485通信 - 6n137光耦隔离电路
  3. matlab 频偏估计
  4. 超分辨率重建——超采样与欠采样
  5. pic单片机c语言乘除法,PIC单片机C语言编程教程(1)
  6. ARM体系结构(四)
  7. [APR]Core Utilization和Cell Utilization的区别
  8. JSON.parse
  9. 2020人工智能学习路线!内附完整自学书籍+知识图谱!
  10. 纪念SlingShot 矩阵快速幂 构造矩阵