关于Java中的String类知识点小总结
Java中的String类知识点
前言
在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
如何创建字符串
最简单的方式
String str = "hello";
因为字符串属于对象,所以和其它对象一样,可以使用关键字和构造方法来创建 String 对象。
String s2 = new String("hello");
储存位置
String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上。
特性
String 类是是immutable(不可变)的,所以你一旦创建了 String 对象,那它的值就无法改变 WHY?
查看源码后可以发现源码使用的是final修饰符
public final class String
String s = "old";
System.out.println("s=" + s);
s = "new";
System.out.println("s=" + s);
从输出结果上看是改变了,但为什么还说String对象是不可变的呢?
s 只是一个 String 对象的引用,并不是对象本身,当执行 s = "new"; 创建了一个新的对象 "new",而原来的 "old" 还存在于内存中。
length() 方法,length 属性和 size() 方法的区别:
- length 属性是针对 Java 中的 数组 来说的,要求数组的长度可以用其 length 属性;
- length() 方法是 针对 字符串 来说的,要求一个字符串的长度就要用到它的length()方法;
- Java 中的 size() 方法是针对 泛型集合 说的, 如果想看这个泛型有多少个元素, 就调用此方法来查看
String array[] = {"first", "second", "third"};//字符串数组
String a = "hello";//字符串
ArrayList<String> list = new ArrayList<>();
list.add(a);
System.out.println("数组array的长度为" + array.length);
System.out.println("字符串a的长度为" + a.length());
System.out.println("list中元素个数为" + list.size());//结果为3 5 1
常见的字符串比较
/**
* 1.储存位置不一样。常量池和堆内存中
* 2."=="比较的是对象的地址 "equals"比较的是值
*/
String s1 = "abc"; // 常量池
String s2 = new String("abc"); // 堆内存中
System.out.println(s1 == s2); // false两个对象的地址值不一样。
System.out.println(s1.equals(s2)); // true
/**
* 先在常量池中创建 ab ,地址指向 s3, 再创建 abc ,指向 s4。
* 对于 s5,先创建StringBuilder(或 StringBuffer)对象,通过 append 连接得到 abc ,再调用 toString() 转换得到的地址指向 s5。
* 故 (s5==s4) 为 false。
*/
String s3="ab";
String s4="abc";
String s5=s3+"c";
System.out.println(s5==s4); // false
System.out.println(s5.equals(s4)); // true
Java中的String、StringBuffer 和 StringBuilder 的区别
- String: 字符串常量,字符串长度不可变。用于存放字符的数组被声明为final的,因此只能赋值一次,不可再更改。
- StringBuffer:字符串变量(Synchronized,即线程安全)。
- 如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer
- 如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。
- Java.lang.StringBuffer 线程安全的可变字符序列。在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。
- StringBuilder:字符串变量(非线程安全)。在内部 StringBuilder 对象被当作是一个包含字符序列的变长数组。
使用的基本原则
- 操作少量的数据用 String
- 单线程操作大量数据用StringBuilder
- 多线程操作大量数据,用StringBuffer
关于Java中的String类知识点小总结的更多相关文章
- JAVA中的String类(详解)
Java.lang.String类是final类型的,因此不可以继承这个类.不能修改这个类.String是一个类不属于基本数据类型. 可以从源码中看到,String是一个final类型. String ...
- java中的String类的不可变性的小例子
在java语言中,String类具有不可变性,即常量字符串不可更改.下面的一个小例子简单演示相关概念. public class test { public static void main(Stri ...
- Java中的String类
/*String类用于描述字符串事物的那么它就提供了多个方法对字符串进行操作 方法都会用,字符串这块就结束了常见的操作有哪些?“abcd”它应该具备什么功能,我们才能更好得操作它?1.获取(必须要掌握 ...
- java中的String类常量池详解
test1: package StringTest; public class test1 { /** * @param args */ public static void main(String[ ...
- Java 中的 String 类常用方法
字符串广泛应用在Java编程中,在Java中字符串属于对象,String 类提供了许多用来处理字符串的方法,例如,获取字符串长度.对字符串进行截取.将字符串转换为大写或小写.字符串分割等. Strin ...
- 为什么Java中的String类是不可变的?
String类是Java中的一个不可变类(immutable class). 简单来说,不可变类就是实例在被创建之后不可修改. 在<Effective Java> Item 15 中提到了 ...
- Java中的String类能否被继承?为什么?
不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的. Java对String类的定义: public final class String implements ja ...
- Java学习笔记(一)——关于java中的String类
[前面的话] 毕业将近6个月了,试用期也快要过去了,期待接下来的日子.在金融类性质的机构,最痛苦的是也许就是大部分系统外包,所以比较少写代码,在这六个月中只写了1个月左右的代码,然后每天都在做一些比较 ...
- java中关于string类和常量池的一点猜想
public class StringTest { /** * @param args */ public static void main(String[] args) { test1 ...
随机推荐
- 在线思维导图Ayoa可以用来梳理双十一优惠规则哦
一年一度的双十一又要来了,小伙伴们是否准备好开始买买买了呢?今年双十一,遇上英雄联盟S10总决赛,1/4决赛苏宁对上京东也让这个"电商大战"产生了很多有趣的梗.当然在玩梗的同时,广 ...
- CorelDRAW 里面如何将文字调整成半透明的颜色
早在几年前,平面设计师在做设计时会遇到关于印刷的难题,那就是为了降低印刷成本,必须减少他们的颜色数量.随着印刷方法的进步,特别是数字出版物的兴起,我们生活在一个主要是通过屏幕观看图形的时代,一个可以显 ...
- 思维导图软件iMindMap怎么使用
人人都说,思维导图记忆法实用.可是,我们应该如何使用思维导图呢?又该如何从思维小白摇身一变成为逻辑大神呢?俗话说,心急吃不了热豆腐,让我们一步一步来,慢慢接触使用思维导图吧. 小编作为"过来 ...
- 带你入门Camtasia Studio录像机软件
Camtasia软件和其他录制软件不同,不论是编辑功能还是制作功能还是其他功能方面都远远高于其他录制软件.那这边我们可以一起了解一下基础软件功能. 首先,我们在电脑端安装了软件以后,进行实际操作.在操 ...
- 一看就懂的:MySQL数据页以及页分裂机制
文章公号 首发!连载中~ 欢迎各位大佬关注, 回复:"抽奖" 还可参加抽活动 文末有二维码 一.知识回顾 回顾一下之前和大家分享的知识点 看了前面的文章,想必你肯定了解了什么是Bu ...
- P6823 「EZEC-4」zrmpaul Loves Array
发现进行一次排序后先前的操作都无效了,所以只需做最后一次排序后的操作.翻转操作打个翻转标记,互换操作根据翻转标记即可. 时间复杂度 \(O\left(n+m\right)\). code: #incl ...
- C++反射机制:可变参数模板实现C++反射(二)
1. 概要 2018年Bwar发布了<C++反射机制:可变参数模板实现C++反射>,文章非常实用,Bwar也见过好几个看了那篇文章后以同样方法实现反射的项目,也见过不少从我的文章抄过去 ...
- CBV装饰校验的三种方式session
代码如下: from django.shortcuts import render,HttpResponse,redirect from django.views import View # Crea ...
- badboy下载
最近新接触了badboy软件,以下是百度网盘链接,有需要可以下载. 链接:https://pan.baidu.com/s/1O4oIhx-twcaMA_fDzRQPHg提取码:7i44 二维码:
- hi-nginx-java的无配置路由配置
hi-nginx-java既可以通过实现hi.servlet抽象来像Flask那样快速配置路由,例如: 1 hi.route r = hi.route.get_instance(); 2 r.get( ...