Java数据类型
- 基本类型
- 数值类型
- 整数类型
- byte 1字节 -128-127
- short 2字节 -32768-32767
- int 4字节
- long 8字节
- 浮点数类型
- float 4字节 精度7位
- double 8字节
- 字符类型
- char 2个字节
- boolean类型
表示对错只占1位 1/8字节
- 整数类型
- 数值类型
public class Demo02{
public static void main (String[] args){
//八大基本数据类型
//整数
int num1 = 10;
byte num2 = 20;
short num3 = 30;
long num4 = 30L;//long类型要在数字后加L
//小数
float num5 = 50.1f;//float类型要在数字后加f
double num6 = 3.14159265358;
//字符
char name = "于";//char只有一个字
//字符串String不是关键字而是一个类
//布尔值
boolean flag = true;
boolean flag1 = false;
}
}
- 引用类型
- 类
- 接口
- 数组
基本数据类型与引用数据类型的区别
基本数据类型与引用数据类型的存储方式不同
基本数据类型存储的是具体的数值
引用类型存储的是对象的地址
class Demo01{
public static void main(String[] args) {
int i;// 默认值: 0
char c;// 默认值:0
String str;// 默认值:null
String stra = "A";
String strb="A";
System.out.println(stra==strb);
}
}
字符串常量池以及字符串为什么不能用 == 比较
- 字符串常量池
为字符串开辟一个字符串常量池,在创建字符串常量时,首先检查字符串
常量池中是否存在该字符串,如果存在该字符串,则直接返回引用的对象,不存
在则创建该字符串并放入字符串常量池中。
class Demo{
String str = new String("a");
}
在执行上述语句时,首先会检查常量池中是否有对象"a",如果有的话则返回对应
的实力,如果没有的话需要创建一个新的实例对象。因此如果常量池中没有"a"需
要创建两个对象,否则创建一个。
- 不能用 == 比较字符串
Java中String表示的所存储数据的地址,如果使用 == 判断的并不是字符串
是否相同,而是判断两个字符串是否存放在相同的位置。
转型
- 基本数据类型的转型:
byte>>short>>int>>long
未声明数据类型的整形,默认为int
float>>double
未声明数据类型的浮点型,默认为double
boolean类型与其他基本类型之间不能进行类型转换 - 自动转型:将数据范围小的数据类型自动转换为数据范围大的类型
class Demo{
public static void main(String[] args) {
long a = 10000000000000;//没有加L会默认为int型,但已经超过范围会报错
long b = 10000000000000L;
int c = 1000;
long d = c;
float e = 1.5F;
double f = e;
}
}
- 强制转型:将数值范围大的数据类型赋值给数值范围小的数据类型,可能会造成精度的丢失
class Demo{
public static void main(String[] args) {
byte p = 3;
int a = 3;
byte b = a;//编译时会出错
byte c = (byte) a;
float d = (float) 4.0;
}
}
- 引用数据类型转型:
自动转型:子类对象名向上转型为父类类型 属于父类引用子类
A a = new B();// 成立的前提:A 是 B的父类
强制转型: 被自动转型过的父类类型变量名可以强制向下转型回子类类型
属于父类转换为子类
B b1 = (B)a;
//声明父类
public class A{
}
//声明两个子类
class B extends A{
public void testB(){
}
}
class C extends A{
}
public class Demo{
public static void main(String[] args) {
B b = new B();
A a1 = b;// 子类转换为父类自动转型
C c = new C();
A a2 = c;//子类转换为父类自动转型
B b1 = (B) a1;//强制转型
b1.testB();
}
}
重写equals 比较对象时需要注意方面
- Java中的String类
在Java中字符串属于对象,String类用来创建和操作字符串- 创建字符串最简单的方式
String str = “ylj”; - 也可以采用关键字和构造方法创建String对象
String str2 = new String(“ylj”); - 由String直接创建的字符串会存储在字符串常量池之中,而由new所创建的
字符串对象则存储在堆上
- 创建字符串最简单的方式
- " == "和"equals()"两种方法比较字符串
- " == "方式所比较的是两个变量本身的值,如果用于String声明的字符串比较
比较的是两个对象在内存中的地址是否相同 - “equals()” 方法比较的是字符串之中所包含的内容是否是相同的
- " == "方式所比较的是两个变量本身的值,如果用于String声明的字符串比较
由上述两个基本知识可以知道
package y20220225;
public class Demo {
public static void main(String[] args) {
String s1 = "ylj";
String s2 = "ylj";
String s3 = new String("ylj");
String s4 = new String("ylj");
System.out.println("s1 == s2:" + (s1 == s2));//s1 == s2:true 两个都是字符串常量池里的地址是同一地址
System.out.println("s3 == s4:" + (s3 == s4));//s3 == s4:false 新建对象在堆中,新建对象的地址位于栈中,地址不同
System.out.println("s.3equals(s4):" + s3.equals(s4));//s.3equals(s4):true 内容相同
}
}
- 重写equals方法时需要注意
首先判断地址是否相同,如果地址相同则必定是同一个变量,无需再进行别的判断
再判断变量类型是否有继承
存在继承的关系,再判断每一个属性的数值是否相同