String表示字符串,Java所有的字符串字面值都是String类的实例实现

String是一个final修饰的类,代表不可变的字符序列

字符串是常量,用双引号表示,值在创建之后不能更改

String对象实际的字符内容是存储在一个字符数组value[]中的

- 被final修饰,String类不能被继承

- 实现了可序列化接口,字符串可以序列化

- 实现了可比较接口,字符串可以进行大小比较

- final char value[] 不可改动

1 字符串重新赋值时,需要重写指定区域赋值,不能使用原有value进行赋值

2 对现有字符串拼接操作时,也是重写指定区域赋值,不能使用原有value进行赋值

3 调用replace方法时,也是重写指定区域赋值,不能使用原有value进行赋值

- 可以得知如果直接使用String频繁更改字面值,性能是很低的

- 字面值的声明方式是引用了字符串的常量池中

- 字符串常量池并不会存储相同内容

字面量 & new 的区别?

public class StringTest {

    public static void main(String[] args) {
String str1 = "Hello String!!!";
String str2 = "Hello String!!!"; String str3 = new String("Java SE");
String str4 = new String("Java SE"); System.out.println("str1 == str2 ? "+ (str1 == str2));
System.out.println("str3 == str4 ? "+ (str3 == str4));
}
}

拼接是否一样?

    public static void main(String[] args) {
String str1 = "AA";
String str2 = "BB"; String str3 = "AABB"; // 字面值
String str4 = "AA" + "BB"; // 字面值链接,还是属于常量池里的 String str5 = str1 + "BB"; // 在堆中重新开辟的
String str6 = "AA" + str2; // 在堆中重新开辟的
String str7 = str1 + str2; // 在堆中重新开辟的 System.out.println("str3 == str4 ? " + (str3 == str4));
System.out.println("str3 == str5 ? " + (str3 == str5));
System.out.println("str3 == str6 ? " + (str3 == str6));
System.out.println("str3 == str7 ? " + (str3 == str7)); String str8 = str5.intern(); // 返回常量池里面的值给Str8
System.out.println("str3 == str8 ? " + (str3 == str8));
}

常见方法

public class StringTest {
public static void main(String[] args) { String str = "Hello String!"; // 返回字符串的字符个数
int length = str.length();
System.out.println("str.length() ? " + length); // 返回索引位置的字符
char charAt = str.charAt(2);
System.out.println("str.charAt(2) ? " + charAt); // 是否为空?
boolean empty = str.isEmpty();
System.out.println("str.isEmpty() ? " + empty); // 返回全大写
String lowerCase = str.toLowerCase();
System.out.println("str.toLowerCase() ? " + lowerCase); // 返回全小写
String upperCase = str.toUpperCase();
System.out.println("str.toUpperCase() ? " + upperCase); // 返回去除左右空白的字符串
String trim = str.trim();
System.out.println("str.trim() ? " + trim); // 普通内容比较
boolean equals = lowerCase.equals(upperCase);
System.out.println("lowerCase.equals(upperCase) ? " + equals); // 忽略大小写比较
boolean ignoreCase = lowerCase.equalsIgnoreCase(upperCase);
System.out.println("lowerCase.equalsIgnoreCase(upperCase) ? " + ignoreCase); // 拼接字符串到结尾
String concat = str.concat(" concat str!!!");
System.out.println("str.concat(\" concat str!!!\") ? " + concat); // 比较大小
int compare = lowerCase.compareTo(upperCase);
System.out.println("lowerCase.compareTo(upperCase) ? " + compare); // 截取片段 包含开始索引,不包含结束索引
String substring = concat.substring(4, 8);
System.out.println(concat + ":" + substring); // 是否按指定后缀结尾
boolean ends = str.endsWith("s");
System.out.println("str.endsWith(\"s\") ?" + ends); // 是否按指定前缀结尾
boolean starts = str.startsWith("a");
System.out.println("str.startsWith(\"a\") ?" + starts); // 是否,从指定索引开始的字符串,匹配指定的字符串
boolean with = str.startsWith("aa", 4);
System.out.println("str.startsWith(\"aa\", 4) ? " + with); // 是否包含字符
boolean e = str.contains("e");
System.out.println("str.contains(\"e\") ? " + e); // 返回指定字符串在 这个字符串中第一次出现的位置
int index1 = str.indexOf("ring"); // 返回指定字符串在 这个字符串中指定的位置后出现的位置
int index2 = str.indexOf("ell",2); // 返回指定字符串在 这个字符串中最后一次出现的位置 从右边开始检索
int index3 = str.lastIndexOf("ring"); // 返回指定字符串在 这个字符串中指定的位置后出现的位置 从右边开始检索
int index4 = str.lastIndexOf("ell",2); // 正则表达式相关 --------------------------------------------------- // 替换字符串中指定的单个字符, 所有s全部替换a
String replace = str.replace('s', 'a'); // 替换整个字符串 所有字符串替换
String string = str.replace("string","hello"); // 字符是否匹配指定的正则表达式
boolean matches = str.matches("这里填写正则表达式规则"); //
String all = str.replaceAll("regex?","www"); //
String all2 = str.replaceAll("regex?","www"); // 按正则表达式分割字符 全切
String[] split = str.split("regex"); // 按个数切,多出的全部放到最后一个
String[] split2 = str.split("regex",3); }
}

常见方法

String - charArray 转换

public class StringTest {
public static void main(String[] args) {
String str = "String & charArray"; // 转字符数组
char[] chars = str.toCharArray(); // 转字符串
String str2 = new String(chars);
}
}

String - byteArray 转换

public class StringTest {
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "String & charArray"; // 转字节数组 参数默认字符集ASCII
byte[] bytes = str.getBytes();
System.out.println(bytes.length + " == " + str.length());
System.out.println(str);
for (int i = 0; i < bytes.length; i++) {
System.out.print(bytes[i] + "\t");
if (i == bytes.length - 1) System.out.println();
} String zh_cn = "爱我中华!!"; // 汉字占用3个字节 参数设置GBK 汉字占用2个字节
byte[] bytes1 = zh_cn.getBytes();
System.out.println(bytes1.length + " == " + zh_cn.length());
System.out.println(zh_cn);
for (int i = 0; i < bytes1.length; i++) {
System.out.print(bytes1[i] + "\t");
if (i == bytes1.length - 1) System.out.println();
} String s = new String(bytes);
String s1 = new String(bytes1,"gbk"); // 如果设置的编码不一致,可以传参设置 System.out.println(s);
System.out.println(s1);
}
}

再谈拼接问题

public class StringTest {
public static void main(String[] args) throws UnsupportedEncodingException { String str = "HelloWorld";
String str2 = "World"; //
final String str4 = "World"; String str3 = "Hello" + str2; // 拼接变量默认做堆空间引用
String str5 = "Hello" + str4; // 拼接常量就常量引用 System.out.println(str == str3);
System.out.println(str == str5); /*
字符串常量 + 字符串常量 结果还是在常量
其中一个是变量,结果在堆中
intern方法从常量池返回
*/
}
}

【Java】【常用类】String的更多相关文章

  1. Java 常用类String类、StringBuffer类

    常用类 String类.StringBuffer类 String代表不可变的字符序列 "xxxxxxx"为该类的对象 举例(1) public class Test { publi ...

  2. 深入理解Java常用类----String

         Java中字符串的操作可谓是最常见的操作了,String这个类它封装了有关字符串操作的大部分方法,从构建一个字符串对象到对字符串的各种操作都封装在该类中,本篇我们通过阅读String类的源码 ...

  3. 深入理解Java常用类----String(二)

    上篇介绍了String类的构造器,获取内部属性等方法,最后留下了最常用的局部操作函数没有介绍,本篇将接着上篇内容,从这些最常见的函数的操作说起,看看我们日常经常使用的这些方法的内部是怎么实现的.第一个 ...

  4. java常用类-String类

    * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,我们可以知道 * A:字符串字面值"abc"也可以看成是一个字符串对象. * B:字符串是 ...

  5. java常用类String

    String: String类: 代表字符串 是一个final类,代表不可变的字符序列 字符串是常量,用双引号引起来表示.值在创建后不可更改 String对象的字符内容是存储在一个字符数组Value[ ...

  6. Java常用类String的面试题汇总

    比较两个字符串时使用"=="还是equals()方法? 当然是equals方法."=="测试的是两个对象的引用是否相同,而equals()比较的是两个字符串的值 ...

  7. Java常用API(String类)

    Java常用API(String类) 概述: java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例 1. ...

  8. Java常用类:包装类,String,日期类,Math,File,枚举类

    Java常用类:包装类,String,日期类,Math,File,枚举类

  9. Java基础 —— Java常用类

    Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@&quo ...

  10. Java常用类学习笔记总结

    Java常用类 java.lang.String类的使用 1.概述 String:字符串,使用一对""引起来表示. 1.String声明为final的,不可被继承 2.String ...

随机推荐

  1. 剑指Offer-57.二叉树的下一个结点(C++/Java)

    题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 分析: 二叉树的中序遍历是左根右,所以如果一个结点的右子 ...

  2. ETL工具-nifi干货系列 第十讲 处理器RouteOnAttribute(数据流路由)

    1.今天我们一起来学习下处理器RouteOnAttribute,此处理器的作用是根据属性值进行路由进而来控制数据流的走向.类似于java中的if-else或者switch-case.如下图所示. Ge ...

  3. tomcat部署Jenkins

    安装环境 jdk 1.8 tomcat 9.0 jenkins 2.290 准备工作 安装好Tomcat,8080端口启动 安装好jdk,配置好环境变量 ECS服务器安全组放开8080端口 关闭防火墙 ...

  4. C# .NET 云南农信国密签名(SM2)简要解析

    BouncyCastle库(BC库)与云南农信最大的区别是 : BC库 SM2Signer.Init()  方法比云南农信多了最后3行代码: digest.Reset(); z = GetZ(user ...

  5. 夜莺监控发布 v6.7 版本,推送部分商业版功能

    熟悉夜莺的小伙伴都知道夜莺分为开源版.专业版.企业版,三个版本良性发展.近期夜莺团队发布了 v6.7 版本,把机器Metadata管理功能推送到了开源版,下面是该功能的简单介绍. 如上图,机器列表页面 ...

  6. 简单易懂的JSON框架

      分享一个由本人编写的JSON框架.   JSON反序列化使用递归方式来解析JSON字符串,不使用任何第三方JAR包,只使用JAVA的反射来创建对象(必须要有无参构造器),赋值,编写反射缓存来提升性 ...

  7. scab2

    package com.cmb.cox.utils;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;im ...

  8. 硬件开发笔记(二十一):外部搜索不到的元器件封装可尝试使用AD21软件的“ManufacturerPart Search”功能

    前言   这是一个AD的一个强大的新功能,能招到元器件的原理图.3D模型还有价格厂家,但是不一定都有,有了也不一定有其3D模型. ManufacturerPart Search 在设计工具中选择即用型 ...

  9. Windows记录登录日志

    有的时候,我们希望系统记录登录的日志,以便查看有无他人动过自己的电脑. 步骤 1.在windows中搜索并打开"组策略". 2.点击计算机配置-->Windows设置--&g ...

  10. HTTP长连接、短连接、Linux网络优化

    无连接 含义:每次传输完数据后就断开连接. 因为早期互联网规模小,并且http具有瞬时性,突发性,服务器同时处理着多个请求.所以采用无连接的方式.以便于腾出资源处理其他请求. 无状态 顺便说一说无状态 ...