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. nmcli 报错

    首先检查你的网卡设备有没有连接,看一下是不是进主机模式 nmcli connection modify ens32 ipv4.addresses 192.168.10.10/24 因为原本就存在网卡配 ...

  2. redux中集成immutable.js

    安装redux-immutable redux中利用combineReducers来合并reducer并初始化state,redux自带的combineReducers只支持state是原生js形式的 ...

  3. ASPNET Core Docker 运行慢报错 C:\Users\<username>\vsdbg\vs2017u5”无效

    ASPNET Core Docker 运行慢报错 C:\Users\<username>\vsdbg\vs2017u5"无效 16.9.20122.2 1.迅雷下载: https ...

  4. core dump 路径定义以及监控

    Core Dump 是什么? Core Dump 是指进程异常退出时,操作系统将进程的内存状态保存到文件中,这个文件就是 Core Dump 文件,中文一般翻译为"核心转储",哈, ...

  5. k8s配置文件管理

    1.为什么要用configMap ConfigMap是一种用于存储应用所需配置信息的资源类型,用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件. 通过ConfigMap可以方便的 ...

  6. 1003 我要通过! PTA Basic Level

    我的个人博客 azoux's blog 题目 我要通过! (20 分) "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 ...

  7. Do not access Object.prototype method 'hasOwnProperty' from target object

    hasOwnProperty 判断对象是否为空 在使用 hasOwnProperty 判断对象是否为空时遇到了一下问题,总结一下 // Do not access Object.prototype m ...

  8. java和javac编译和运行记事本编写的代码

    演示代码如下: package com.springboot.demo; public class Hello { public static void main(String[] args) { S ...

  9. Oracle 数据库 命令行安装

    Oracle 数据库 命令行安装 1. 准备工作 关闭 防火墙,关闭 SElinux 2. 安装相关依赖包 yum -y install binutils compat-libcap1 compat- ...

  10. 超快的 Python 包管理工具「GitHub 热点速览」

    天下武功,无坚不破,唯快不破! 要想赢得程序员的欢心,工具的速度至关重要.仅需这一优势,即可使其在众多竞争对手中脱颖而出,迅速赢得开发者的偏爱.以这款号称下一代极速 Python 包管理工具--uv ...