八大基本类型:int,short,long,byte,double,float,char,boolean
基本类型的包装类:
基本数据类型与包装类之间的转换:
装箱:把基本数据类型转换成包装类型
拆箱:把包装类型转换成基本数据类型
//自动装箱 int a = 20; Integer i = a; //自动拆箱 int c = i;
常遇问题:吧String类型转换为其他数值类型
public class Demo {
public static void main(String[] args) {
String s = "1235468";
Integer i = Integer.parseInt(s);//String类型转换为int类型
Double d = Double.parseDouble(s);//String类型转换为double类型
//其他数值类型同理 包装类型 类型名 = 包装类型.parse对应数据类型(String类型名)
System.out.println(i);
System.out.println(d);
}
}
字符串
字符串的使用场景:后期对数据库的一系列操作与字符串密切相关
String类字符串一共有三种类:
String
StringBuffer
StringBuilder
创建字符串String类成为不可变字符串
原因:在jdk源码中,String存储的字符串存储在char数组 value[]中, 这个数组使用final修饰, value的数组无法改变,String也就是一个不可变的字符串
例子:
String str = "abc"; str = "abc"+ "d";
由上图,当我们创建一个String对象时,会在常量池中生成一个空间,里边存储了abc这个值,他是不可改变的,而str只是对abc字符串进行引用,当执行str = "abc"+ "d"; 时,常量池会产生三个空间分别存放字符串abc、d、abcd。str指向的地址由原来的abc空间的地址ox001变成了abcd空间的地址ox585。所以并没有对字符串abc的值进行了改变,知识改变的str的指向。
字符串常量池String pool
使用new关键字,构造方法
直接赋值
Stirng 变量 = 字符串常量对象; 列如: public class Demo { public static void main(String[] args) { String s = "1235468"; System.out.println(s); } }
字符串之间的比较创建的字符串都存在字符串常量池中
存放字符串的步骤:
在字符串常量池中查找是否已存在将要存放的字符串的空间
如果有,返回相应的字符串对象
如果没有,创建新的对象
StringBuffer/StringBuilder1)字符串1 == 字符串2:这种形式比较的是比较的是字符串的地址码
public static void main(String[] args) { String Str1 = new String("123"); String Str2 = new String("123"); System.out.println(Str1 == Str2); }
2)字符串1.equals(字符串2):这种形式比较的是字符串的内容
public static void main(String[] args) { String Str1 = new String("123"); String Str2 = new String("123"); System.out.println(Str1.equals(Str2)); }
字符串类
String: 不可变的字符串, 频繁进行+操作, 在堆中创建String对象, 效率比较低, 频繁修改这个字符串, 第一个String不提供相关的方法, 原因: String是一个不可变的字符串, 效率低
对字符串进行频繁修改操作, jdk提供了StringBuilder/StringBuffer: 可变的字符串
StringBuffer与StringBuilder的区别:
StringBuffer是一个线程安全的, 所有的方法添加了synchronized关键字, 同步方法, 效率低
StringBuilder是一个线程不安全的, 所有方法都是非同步方法, 效率高



