public class StringTest{
public static void main(String[] args){
String s1 = new String("helle");
String s2 = new String("helle");
/**在这个例子中,一共创建了三个对象:
* 1.方法区中字符串常量池有1个“hello”。
* 2.堆内存当中有2个String对象。
*/
}
}
String常用的构造方法
①String s = new String(“”);
②String s = “”; 最常用
③String s = new String(char数组)
String s = new String(char数组,起始下标,长度);
④String s = new String(byte数组)
String s = new String(byte数组,起始下标,长度);
public class StringTest {
public static void main(String[] args) {
//创建字符串对象最常用的一种方式
String s1 = "hello world";
//常用的构造方法
//String(byte[])
byte[] bytes = {97,98,99}; //在ASCII中,97对应a,98对应b,99对应c
String s2 = new String(bytes);
//输出一个引用时,会自动调用toString()方法,默认Object的话,会自动输出对象的内存地址。
System.out.println(s2); //abc
//String(字节数组,数组元素下标起始位置offset,长度length)
//将一部分转化为字符串
String s3 = new String(bytes,1,2);
System.out.println(s3); //bc
//将char数组全部转换成字符串
char[] chars = {'咖','啡','加','点','i','c','e'};
String s4 = new String(chars);
System.out.println(s4); //咖啡加点ice
String s5 = new String(chars,0,2);
System.out.println(s5); //咖啡
}
}
public class StringTest {
public static void main(String[] args) {
//1.char charAt(int index)
//返回索引的char值
char c = "冰咖啡".charAt(1);
System.out.println(c); //咖
//2.int compareTo(String anotherString)
//按照字典顺序比较字符串,拿两个字符串第一个不同的字符进行比较。
int result = "abc".compareTo("abc"); //前后一致
System.out.println(result); //0
int result2 = "abcc".compareTo("abce"); //前小后大
System.out.println(result2); //-2
int result3 = "abce".compareTo("abcd"); //前大后小
System.out.println(result3); //1
//3.boolean contains(CharSequence s)
//判断前面的字符是否包含后面的字符串
System.out.println("ice coffee".contains("coffee")); //true
System.out.println("ice coffee".contains("water")); //false
//4.boolean endsWith(String suffix)
//判断前面字符是否以某个字符串结尾
System.out.println("test.txt".endsWith(".java")); //false
System.out.println("test.txt".endsWith(".txt")); //true
//5.boolean equals(Object anObject)
//比较两个字符串必须实用equals方法,不能使用"=="
System.out.println("abc".equals("abc")); //true
//6.boolean equalsIgnoreCase(String anotherString)
//判断两个字符串是否相等,
System.out.println("Abc".equalsIgnoreCase("abc")); //true
//7.byte[] getBytes()
//将字符串对象转换成字节数组
byte[] bytes = "abcdef".getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.printf(bytes[i] + " "); //97 98 99 100 101 102
}
System.out.println();
//8.int indexOf(String str)
//判断某个子字符串在当前字符串中第一次出现的索引
System.out.println("icecoffee".indexOf("coffee")); //3
//9.boolean isEmpty()
//判断某个字符串是否为"空字符串"
String s = "";
System.out.println(s.isEmpty()); //true
//10.int length
//返回字符串长度
//判断数组是length属性,判断字符串是length()方法
System.out.println("abc".length()); //3
//11.int lastIndexOd(String str)
//判断某字符串在当前字符串中最后一次出现索引(下标)
System.out.println("iceciesaicdakicesdamk".lastIndexOf("ice")); //13
//12.String replace(CharSequence target,CharSequence replacement)
//String的父接口就是:CharSequence
String newString = "icecoffee".replace("ice","warm");
System.out.println(newString); //warmcoffee
//13.String[] split(String regex)
//拆分字符串
String[] ymd ="2016:11:19".split(":");
for (int i = 0; i < ymd.length; i++) {
System.out.printf(ymd[i] + " "); //2016 11 19
}
System.out.println();
//14.boolean startsWith(String prefix)
//判断某个字符串是否以某个字符串开始
System.out.println("icecoffee".startsWith("ice")); //true
System.out.println("icecoffee".startsWith("warm")); //false
//15.String substring(int beginIndex)
//截取字符串
System.out.println("icecoffee".substring(3)); //coffee
//16.String substring(int beginIndex,int endIndex)
//beginIndex 起始位置,有包括在内
//endIndex 结束位置,没有包括在内
System.out.println("icecoffeemade".substring(3,9)); //coffee
//17.char[] toCharArray()
//将字符串转换成char数组
char[] chars = "icecoffee".toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.printf(chars[i] + " "); //i c e c o f f e e
}
System.out.println();
//18.String toLowerCase()
//全部转为小写
System.out.println("ICECOFFEE".toLowerCase()); //icecoffee
//19.String toUpperCase()
//全部转为大写
System.out.println("icecoffee".toUpperCase()); //ICECOFFEE
//20.String trim()
//去除字符串前后空白
System.out.println(" ice coffee ".trim()); //ice coffee
//21.String中只有一个静态方法,不需要new对象
//valueOf()
//将非字符串转换成字符串,如果传的是一个对象,会调用toString方法。
String s1 = String.valueOf(true); //可以把所有不是字符串的类型转换成字符串
System.out.println(s1); //true
String s2 = String.valueOf(new Customer());
System.out.println(s2); //这是一杯冰美式
}
}
class Customer{
@Override
public String toString() {
return "这是一杯冰美式";
}
}
Java中字符串是不可变的,每次拼接都会产生新的字符串,如果频繁拼接字符串,会占用大量的方法区内存造成内存空间的浪费。
如果需要进行大量字符串拼接操作,使用JDK自带的:
java.lang.StringBuffer
java.lang.StringBuilder
StringBuffer:在方法中都有synchronized关键字修饰,表示StringBuffer在多线程环境下运行时安全的。是线程安全的。
public class StringBufferTest {
public static void main(String[] args) {
//StringBuffer创建一个初始化容量为16个byte[] 数组。
StringBuffer stringBuffer = new StringBuffer();
//append是追加的意思,方法底层在进行追加的时候会自动扩容
stringBuffer.append("这是");
stringBuffer.append(1);
stringBuffer.append("杯冰美式");
System.out.println(stringBuffer); //这是1杯冰美式
}
}
Java中为8中基本数据类型对应准备了8种包装类型。8种包装类属于引用数据类型,父类是Object。
8中数据类型对应包装类名
基本数据类型 | 包装类型 |
---|---|
byte | java.lang.Byte |
short | java.lang.Short |
int | java.lang.Integer |
long | java.lang.Long |
float | java.lang.Float |
double | java.lang.Double |
boolean | java.lang.Boolean |
char | java.lang.Character |
public class IntegerTest {
public static void main(String[] args) {
//装箱:基本数据类型→引用数据类型
Integer i = new Integer(123);
//拆箱:引用数据类型→基本数据类型
float f = i.floatValue();
System.out.println(f); //123.0
int retValue = i.intValue();
System.out.println(retValue); //123
}
}
八种包装类中有6个包装类的父类是Number,Number是一个抽象类,包括以下的拆箱方法:
byte byteValue() 以byte形式返回指定数值
double doubleValue() 以double形式返回指定数值
float floatValue() 以float形式返回指定数值
int intValue() 以int形式返回指定数值
long longValue() 以long形式返回指定数值
short shortValue() 以short形式返回指定数值
Integer类的构造方法有两个:Integer(int) Integer(String)。其他包装类也有相似构造方法
public class IntegerTest {
public static void main(String[] args) {
//将数字100转换成Integer
Integer s = new Integer(100);
//将String类型123转换成Integer
Integer s2 = new Integer("123");
System.out.println(s); //100
System.out.println(s2); //123
//通过包装类常量,来获取最大值和最小值
System.out.println(Integer.MAX_VALUE); //2147483647
System.out.println(Integer.MIN_VALUE); //-2147483648
}
}
public class IntegerTest {
public static void main(String[] args) {
//自动装箱:基本数据类型--(自动转换)-->包装类型
Integer s = 900;
System.out.println(s);
//自动拆箱:包装类型--(自动转换)-->基本数据类型
int y = s;
System.out.println(y);
System.out.println(s + 100);
//"=="不会出发自动拆箱机制
Integer a = 1000; //这里a是一个引用
Integer b = 1000; //这里b是一个引用
System.out.println(a == b); //两个引用保存的内存地址不同,false
//java中为了提高执行效率,将[-128到127]之间的所有包装对象提前创建好,
//放到方法区中的“整型常量池”中,所以用这个区间的数据不需要再new。
Integer a1 = 127;
Integer b1 = 127;
System.out.println(a1 == b1); //true
}
}
public class IntegerTest {
public static void main(String[] args) {
//手动拆箱
Integer x = 100;
int y = x.intValue();
//java.lang.NumberFormatException:数字格式化异常
//Integer a = new Integer("中文");
//重点方法:static int parseInt(String s)
//在网页文本框中输入的123实际上是一个"123"字符串
//后台要求需要存入123数字,则使用到这个方法
int retValue = Integer.parseInt("123"); //String → int
//int retValue2 = Integer.parseInt("中文"); java.lang.NumberFormatException:数字格式化异常
System.out.println(retValue + 100);
//static String toBinaryString(int i)
//将十进制转化为二进制字符串
String binaryString = Integer.toBinaryString(3); //11
System.out.println(binaryString);
//static String toHexString(int i)
//将十进制转化为十六进制字符串
String tohexString = Integer.toHexString(31); //1f
System.out.println(tohexString);
}
}
public class IntegerTest01 {
public static void main(String[] args) {
//String --> int
int i1 = Integer.parseInt("100");
//int --> String
String i2 = i1 + "";
//int --> Integer
//自动装箱
Integer i3 = 100;
//Integer --> int
int y = i3;
//String --> Integer
Integer i4 = Integer.valueOf("123");
//Integer --> String
String i5 = String.valueOf(i4);
}
}
——本章节为个人学习笔记。学习视频为动力节点Java零基础教程视频:动力节点—JAVA零基础教程视频