程序中所有双引号字符串,都是String类的对象
特点:
1,字符串内容永不可变。(有一个字符串池(直接双引号得到的),当创建字符串时,如果字符串已经存在于池中,则将返回现有字符串的引用,而不是创建新对象。)
2,字符串效果上相当于char[]字符数组,但是底层原理是byte[]字节数组
3,new得到的不在字符串池中
//创建方法
public class Day4_3 {
public static void main(String[] args) {
//字符串的三种创建方法
//空参构造
String str1=new String();
System.out.println(str1); //
//字符数组创建
char[] arry= {'a','b','c'};
String str2=new String(arry);
System.out.println(str2); //abc
//byte数组创建
byte[] arry1= {97,98,99};
String str3=new String(arry1);
System.out.println(str3); //abc
//直接创建
String str4="Hello";
System.out.println(str4); //Hello
}
}
1,比较地址用== 比较值用 equals(object obj)
2,当比较的内容一个常量一个变量时,推荐把常量放在前面 常量.equals(变量)
public class Day_5 {
public static void main(String[] args) {
String str1 = "Hello";
String str2="Hello";
char[] arry= {'H','e','l','l','o'};
String str3= new String(arry);
//equals(object obj)判断字符串是否相同
System.out.println(str1.equals(str2)); //true
System.out.println(str2.equals(str3)); //true
System.out.println(str1.equals(str3)); //true
System.out.println("Hello".equals(str1)); //true
System.out.println("hello".equals(str1)); //false
}
}
public class Day5_2 {
public static void main(String[] args) {
//获取字符串长度
int length="abcdefghijklmnopq".length();
System.out.println(length);
//拼接字符串
String str1="Hello";
String str2="world";
String str3=str1.concat( str2);
System.out.println(str1); //Hello
System.out.println(str2); //world
System.out.println(str3); //Helloworld
//获取指定位置的单个字符
String ch="Hello";
System.out.println(ch.charAt(2)); //l
//查找参数字符串在本来字符串中第一次出现位置 否则返回-1
String ch1="HelloHelloworldHelloworld";
System.out.println(ch1.indexOf("ll")); //2
System.out.println(ch1.indexOf("a")); //-1
//字符串截取
//public String substring(int index);截取参数位置到末尾
//public String substring(int begin,int end);截取参数开始到结尾
String str4="abcdefghijklmnopq";
String str5=str4.substring(7);
System.out.println(str5); //hijklmnopq
String str6=str4.substring(3, 7);
System.out.println(str6); //defg
//字符串变字符数组
//public char[] toCharArray();
String str7="Hello";
System.out.println(str7.toCharArray()[1]); //e
char[] ch2=str7.toCharArray();
System.out.println(ch2[3]); //l
System.out.println(ch2.length); //5
//字符串变byte数组
//public byte[] getBytes();
String str8="Hello";
byte[] by=str7.getBytes();
System.out.println(by[3]); //108
System.out.println(by.length); //5
//字符串替换
//public String replace(CharSequence oldString,CharSequence newString)
String str9="helloHello";
String str10=str9.replace('o', 'a');
System.out.println(str10); //hellaHella
//字符串切割
//public String[] split(String regex);
String str11="aaa,bbb,ccc,ddd";
String[] str12=str11.split(",");
for(int i=0;i<str12.length;i++) {
System.out.println(str12[i]); //aaa bbb ccc ddd
}
}
}
static修饰成员方法,就成了静态方法。静态方法不属于对象,属于类。 直接 类.方法
无论是成员变量还是成员方法,推荐直接 类.xxx调用
静态不能直接访问非静态,在内存中先有静态后有非静态。
静态方法不能使用this
静态变量和类有关 和 对象无关
当第一次用到本类时 静态代码块执行唯一的一次
public class 类名称{
static {
静态代码块内容;
}
}
与数组相关的工具类,提供了大量静态方法,实现数组的功能
import java.util.Arrays;
public class Day5_3 {
public static void main(String[] args) {
//Arrays.toString(数组) 将任何数组变为字符串
int[] i= {1,2,3,4,5};
String array=Arrays.toString(i);
System.out.println(array); //[1, 2, 3, 4, 5]
//Arrays.sort(数组) 从小到大排序,字符串升序,自定义类要有接口
int[] a= {1,5,9,8,7,4,6,3,1,2,5};
Arrays.parallelSort(a);
System.out.println(Arrays.toString(a)); //[1, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9]
}
}
import java.util.*;
public class Day5_4 {
public static void main(String[] args) {
//绝对值
double a=-45.6;
double aI=Math.abs(a);
System.out.println(aI); //45.6
//向上取整
System.out.println(Math.ceil(3.9)); //4.0
System.out.println(Math.ceil(3.1)); //4.0
System.out.println(Math.ceil(3.0)); //3.0
//向下取整
System.out.println(Math.floor(3.9)); //3.0
System.out.println(Math.floor(3.1)); //3.0
System.out.println(Math.floor(3.0)); //3.0
//四舍五入
System.out.println(Math.round(3.9)); //4
System.out.println(Math.round(3.1)); //3
System.out.println(Math.round(3.0)); //3
}
}