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都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
随机推荐
- Maven: 自动远程部署
1. 在settings.xml中的Servers节点中增加Server的登录信息: <server> <id>deploy_server_65</id> < ...
- iOS获取设备型号的方法
1. [UIDevice currentDevice].model 自己写的看只抓到模拟器和iPhone.暂时不推荐. 2.自己写的找的方法再添加.直接 NSString * deviceMod ...
- python mysql 查询返回字典结构
cur = self.conn.cursor(MySQLdb.cursors.DictCursor)加上MySQLdb.cursors.DictCursor可以返回字典结构 {列名:值} class ...
- 修改initrd.img里ko文件的一个小tips
在经历以下步骤解开initrd.img文件之后: 若file initrd.img 指示initrd.img为gzip文件,则2: mv initrd.img initrd.gz gunzip -d ...
- JavaScript中对象的属性
在JavaScript中,属性决定了一个对象的状态,本文详细的研究了它们是如何工作的. 属性类型 JavaScript中有三种不同类型的属性:命名数据属性(named data properties) ...
- C++之queue模板类
1.queue常用成员函数 ①size() 返回队列中元素的个数 ②empty() 如果队列空则返回真 ③back() 返回最后一个元素引用即队尾. ④front() 返回第一个元素引用即队首. ⑤ ...
- iOS开发中,修改ASIHTTPRequest源码,禁止在POST时URL编码
通过ASIHTTPRequest库进行POST时,会对POST的文本内容进行encodeURL,而且ASIHTTPRequest自身并没有配置项可以关闭这个转换. 本文提供一个方法关闭encodeUR ...
- hdu1055
#include<iostream> #include<iomanip> #include<cstdio> #include<cstring> #inc ...
- 释放License命令
lmutil_x86.exe lmremove -c 1055@Vappcloud-WinS acfd Administrator VappCloud_Win7a.vancloud-corp.com ...
- Sharepoint2013商务智能学习笔记之部署AdventureWorksDW2012数据库(三)
AdventureWorksDW2012是sql server2012的样本数据库,后面做商务智能Demo会用到,所以需要下载并安装到sql server2012上,下载地址 第一步,下载数据库 第二 ...