java——String、StringBuffer、StringBuilder、包装类、单双引号
String:
String是一个特殊的类,被定义为final类型,为字符串常量,同样的字符串在常量池中不能重复。
但是由于使用关键字new创建新的字符串,java会在对中分配新的空间,这样即使字符串相同返回的引用也不相同。
public class Exp {
public static void main(String[] args) {
String a = "hello";
String b = "hello";
String c = new String("hello");
System.out.println(a==b); //true
System.out.println(a==c); //false
}
}
而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。
StringBuilder和StringBuffer: 对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。StringBuffer支持多线程,且具有线程安全性,该类的方法可以同步执行。缓冲区字符串的初始长度为字符串长度加16。str.capacity()
注意这里的equals()方法:String重写了equals(),这里的equals()比较的是String的值,而StringBuffer()继承了Object类的equals(),这个equals()比较的是地址。
记录一个子串在整串中出现的次数:
package package_name;
public class exp {
public static void main (String[] args) {
String str = "abcssssasasasnddbiweabcabcahabcccccabqwertadabc";
String key = "abc";
int res = getCounts(str, key);
System.out.println(res);
}
public static int getCounts(String str, String key) {
int count = 0;
int index = 0;
if(!str.contains(key)) {
return count;
}
while((index = str.indexOf(key) )!= -1) {
str = str.substring(index + key.length());
count++;
}
return count;
}
}
包装类:
Java并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。但是我们在实际使用中经常需要将基本数据类型转化成对象,便于操作。比如:集合的操作中。这时,我们就需要将基本数据类型转化成对象。
装箱和拆箱的自动转换是在编译阶段完成的。
| 基本数据类型 | 对应的包装类 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| char | Character |
| float | Float |
| double | Double |
| boolean | Boolean |
字符串排序:
package package_name;
import java.util.Arrays;
public class exp {
private static final String SPACE_SEPARATOR = " ";
public static void main (String[] args) {
String str = "20 78 9 -7 88 36 29";
System.out.println(str);
str = sortStringNumber(str);
System.out.println(str);
}
public static String sortStringNumber(String str) {
String[] str_arr = stringToArray(str);
int[] int_arr = toIntArray(str_arr);
mySortArray(int_arr);
String temp = arrayToString(int_arr);
return temp;
}
public static String[] stringToArray (String str){
String[] str_arr = str.split(SPACE_SEPARATOR);
return str_arr;
}
public static int[] toIntArray(String[] str_arr) {
int[] str_int = new int[str_arr.length];
for(int i=0;i<str_arr.length;i++) {
str_int[i] = Integer.parseInt(str_arr[i]);
}
return str_int;
}
public static void mySortArray(int[] int_arr) {
Arrays.sort(int_arr);
}
public static String arrayToString(int[] int_arr) {
StringBuffer sb = new StringBuffer();
for(int i=0; i<int_arr.length; i++) {
sb.append(int_arr[i] + SPACE_SEPARATOR);
}
return sb.toString();
}
}
在Python中单双引号没什么区别,只是为了字符串中引入单双引号方便,但是在java中单双引号是不同的:
单引号:引的数据 是char类型的
双引号:引的数据 是String类型的
java——String、StringBuffer、StringBuilder、包装类、单双引号的更多相关文章
- Java String StringBuffer StringBuilder
String 字符串常量存储在常量区,每次追加操作会创建新的对象: StringBuffer 字符串变量 线程安全 在堆上创建,每次追加操作在原对象上进行操作: 速度 StringBuffer ...
- java ——String , StringBuffer, StringBuilder类
一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: “==” 比较两个对象是否引用同一 ...
- 【Java基础】String StringBuffer StringBuilder
String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...
- JAVA里的单引号和双引号及String和char的区别
JAVA里的单引号和双引号及String和char的区别 单引号引的数据 是char类型的双引号引的数据 是String类型的单引号只能引一个字符而双引号可以引0个及其以上 ************* ...
- Java学习笔记--String StringBuffer StringBuilder
String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...
- 浅谈 Java 字符串(String, StringBuffer, StringBuilder)
我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...
- 重温java中的String,StringBuffer,StringBuilder类
不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...
- Java String、StringBuilder和StringBuffer
转载: Java String.StringBuilder和StringBuffer 概览 在Android/Java开发中,用来处理字符串常用的类有3种: String.StringBuilder. ...
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
随机推荐
- 检测 iOS 的 APP 性能的一些方法
本文转载于微信公众号:iOS大全 首先如果遇到应用卡顿或者因为内存占用过多时一般使用Instruments里的来进行检测.但对于复杂情况可能就需要用到子线程监控主线程的方式来了,下面我对这些方法做些介 ...
- 洛谷【P1104】生日(冒泡排序版)
题目传送门:https://www.luogu.org/problemnew/show/P1104 题目很简单,我主要是来讲冒泡排序的. 所谓冒泡排序,流程如下: 每次确定一个\(rk\)(从\(n\ ...
- unittest单元测试生成HTML测试报告
前言: HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展,它可以生成 HTML的 测试报告. 一.下载HTMLTestRunnerNew.py文件: 下载链接 ...
- 滑动swipe的妙用
转自:http://www.cnblogs.com/NEOCSL/archive/2013/03/04/2942861.html iterface ITouchable; function OnPic ...
- Nmap几个常用的参数
Nmap扫描端口的6种状态: open:端口是开放的 closed:端口是关闭的 filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态 unfiltered:端口没有被屏蔽,但要进一步确定 ...
- 关于android 数据库查询出现 _id column do not exist 的处理
查询的字段必须带上_id字段,否则就会出现此类异常,导致程序崩溃
- mysql更改时区
set global time_zone = '+8:00'; ##修改mysql全局时区为北京时间,即我们所在的东8区 set time_zone = '+8:00'; ##修改当前会话时区 flu ...
- Learning Python 008 正则表达式-002 findall()方法
Python 正则表达式 - findall()方法 重点 findall()方法的使用 - 程序讲解 简单的符号的使用 正则表达式的库文件是re,先导入库文件: import re .的使用举例 # ...
- 荧光分子的dynamic quenching 和 通常说的quenching的区别?
quenching有两种,学术上分为dynamic quenching 和static quenching,我们通常说的quenching就是 static quenching. static que ...
- range分表
按主键范围进行分表,假设当前主键的最大值为5000,把数据拆成5等份 1-1000:是5000的第1个范围,把该范围的数据作为一张表 1001-2000:是5000的第2个范围,把该范围的数据作为一张 ...