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都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
随机推荐
- MaCrea Lit Sphere maps
http://www.zbrushcentral.com/showthread.php?92157-MaCrea-Material-Creation-Tool 这边提供几个可以获取MatCap贴图的网 ...
- Poj 1936,3302 Subsequence(LCS)
一.Description(3302) Given a string s of length n, a subsequence of it, is defined as another string ...
- Code:目录
ylbtech-Code:目录 1.返回顶部 1. https://github.com/ 2.返回顶部 1. https://gitee.com 2. 3.返回顶部 4.返回顶部 5.返 ...
- 【jQuery】jquery.metadata.js验证失效
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- hibernate 数据关联一对一
第一种一对一 person和card,card的id即作为主键,又作为外键 // 各村对方的一个对象 public class Person { private Integer id; privat ...
- AutoMapper学习笔记
进入公司后学习到的东西,之前记录在github上 现在搬运过来 AutoMapperDemo 需要安装两个包 AutoMapper AutoMapper.Extensions.Microsoft.De ...
- Linux部署walle
背景:Walle 一个web部署系统工具,配置简单.功能完善.界面流畅.开箱即用!支持git.svn版本管理,支持各种web代码发布,PHP,Python,JAVA等代码的发布.回滚,可以通过web来 ...
- restful用法
http://www.cnblogs.com/wen-wen/p/6149847.html一.创建services文件夹services文件夹下1.BaseService.jsclass Servic ...
- redis GEO地理位置命令介绍
GEOADD keylongitude latitude member [longitude latitude member ...] Available since 3.2.0. Time comp ...
- JVM原理解析
JVM主要的功能: 内存分配 程序调度 内存释放(栈等自动释放.堆垃圾回收) 异常处理 https://www.cnblogs.com/dingyingsi/p/3760447.html https: ...