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
}
}

  而StringBuilderStringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

  Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

 

StringBuilderStringBuffer:  对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比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、包装类、单双引号的更多相关文章

  1. Java String StringBuffer StringBuilder

    String  字符串常量存储在常量区,每次追加操作会创建新的对象: StringBuffer  字符串变量  线程安全 在堆上创建,每次追加操作在原对象上进行操作:  速度 StringBuffer ...

  2. java ——String , StringBuffer, StringBuilder类

    一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: “==”  比较两个对象是否引用同一 ...

  3. 【Java基础】String StringBuffer StringBuilder

    String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...

  4. JAVA里的单引号和双引号及String和char的区别

    JAVA里的单引号和双引号及String和char的区别 单引号引的数据 是char类型的双引号引的数据 是String类型的单引号只能引一个字符而双引号可以引0个及其以上 ************* ...

  5. Java学习笔记--String StringBuffer StringBuilder

    String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...

  6. 浅谈 Java 字符串(String, StringBuffer, StringBuilder)

    我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...

  7. 重温java中的String,StringBuffer,StringBuilder类

    不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...

  8. Java String、StringBuilder和StringBuffer

    转载: Java String.StringBuilder和StringBuffer 概览 在Android/Java开发中,用来处理字符串常用的类有3种: String.StringBuilder. ...

  9. java中 String StringBuffer StringBuilder的区别

    * String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...

随机推荐

  1. 汇编题目:在DOS下,按F1键后改变当前屏幕的显示颜色

    我们都知道int9中断是键盘的按键中断程序,按下键盘触发int9中断,不懂int9中断的请自己去百度查查说明和用法 利用中断任务安装一个新的int 9中断例程,功能:在DOS下,按F1键后改变当前屏幕 ...

  2. HBase的bulkLoad

    HBase的BulkLoad有两种方式: thinrow的机制是flatmap把cell的信息进行flatmap:适合少于1万列的数据集:thinrow的涵义就是少行多列: bulkload的机制则是 ...

  3. C# 性能总结

    尽量使用using语句块和finally (实现IDisposable) 尽量使用单个大程序集而不是多个小程序集 (使用NGen.exe) 使用sealed关键字 权衡虚函数 使用弱引用

  4. 机器学习:Jupyter Notebook中numpy的使用

    一.Jupyter Notebook的魔法命令 # 模块/方法 + ?或者help(模块/方法):查看模块/方法的解释文档: 1)%run # 机械学习中主要应用两个魔法命令:%run.%timeit ...

  5. 问题11:如何进行反向迭代 & 如何实现反向迭代

    # 有关列表问题,参考:Python:列表list 案例: 需求:实现一个连续浮点数发生器FloatRange(和range类似),根据给定范围(start,end)和步进值(step),产生一系列连 ...

  6. JavaScript-Tool:template

    ylbtech-JavaScript-Tool: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http:/ ...

  7. STL string大小写 转换

    std::string data = "This is a sample string."; // convert string to upper case std::for_ea ...

  8. Hibernate---Hql查询2---

    hibernate.cfg.xml配置: <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configurati ...

  9. 字符编码ASCII、Unicode、GB

    计算机的存储都是二进制的,那么我们平时看到的各种字符都需要通过按照一定的格式转换成为二进制才能在被计算机识别与处理.这个过程便成为编码.常见的编码方式有ASCII.Unicode.GB2312等. 1 ...

  10. 2、Spark基本工作原理与RDD

    一.基本工作原理 1.特点 分布式: 主要是基于内存(少数情况基于磁盘): spark与,MapReduce最大的不同在于迭代式计算: MR分为两个阶段,map和reduce,两个阶段完了我们,job ...