java基础知识点总结(一)——基本数据类型、==和equals区别、常量池

一、Java的基本数据类型
java为数值、字符值、布尔值数据提供了八种基本数据类型

类型名(封装类)范围大小(字节)
byte(Byte)字节-128~127(2的7次方)1字节
short(Short) 短整型-32768~32767 (2的15次方)2
int(Integer)整型4字节
long(Long)长整型8
float (Float)浮点型4字节
double(Double) 双精度型8
boolean(Boolean) 布尔型
char(Character) 字符型2

1byte=8bit

代码测试基本数据类型范围
	System.out.println(Byte.MAX_VALUE);
	System.out.println(Byte.MIN_VALUE);
	System.out.println(Integer.MAX_VALUE);
	System.out.println(Integer.MIN_VALUE);
整型默认的常量值: int类型
Long a1 = 21 	//这时自动将a1转换成Int类型的数据(主动)
Long a2 = 210000000000 	 //这时提示报错,因为a2的数值大于了int的取值范围
Long a2 = 210000000000L 	//正确
浮点型默认的常量值:double类型
float a1 = 1.1;  //报错
float a1 = 1.1f; //正确
double a = 1.1; //正确
double a = 1.1d;	//正确
char a = 97;  
syso(a);  //输出为字符a
char b = 65;
syso(b); //输出为A

二、String类型

String类型不是基本数据类型,是引用类型

				       String对象的简单方法
方法描述
length()返回字符串中的字符数
charAt(index)返回字符串s中指定位置的字符
concat(s1)将本字符串和字符串s1连接,返回一个新的字符串
toUpperCase()返回一个新字符串,其中所以的字母大写
toLowerCase()返回一个新字符串,其中所以的字母小写
trim()返回一个新字符串,去掉两边的空白字符串

调用规则:

 String s = "Hello Java";
  s.方法名();
		

三、基本数据类型和引用数据类型
在这里插入图片描述

1、基本数据类型和引用数据类型的区别:
每个变量都代表一个存储值的内存位置。当声明一个变量时,就是在告诉编译器这个变量可以存放什么类型的值。
对于基本类型变量来说,对应内存所存储的值是基本类型值。 对引用类型变量来说,对应内存所存储的值是一个引用,是对象的存储地址。

在这里插入图片描述
在这里插入图片描述

2、如果一个引用类型的数据域与没有引用任何对象,那么这个数据域的默认值是null;
数值类型数据域的默认值是0;boolean类型数据域的默认值是false; char类型数据域的默认值是‘\u0000’。
但是java没有给方法中的局部变量赋默认值

例如:1
在这里插入图片描述报错:系统会提示你 变量a 没有进行初始化

例如:2
在这里插入图片描述

由此可见:java不会给方法中的局部变量赋值,但是会给全局变量赋值

四、java编译器和java解释器

Java编译器:将Java源文件(.java文件)编译成字节码文件(.class文件,是特殊的二进制文件,二进制字节码文件),这种字节码就是JVM的“机器语言”。
Java解释器:是JVM的一部分。Java解释器用来解释执行Java编译器编译后的程序。
JVM负责运行字节码:JVM把每一条要执行的字节码交给解释器,翻译成对应的机器码,然后由解释器执行。

五、“==”和equals()

详细描述

“==”

在java中,主要有两个作用。

1、基础数据类型:比较的是他们的值是否相等,比如两个int类型的变量,比较的是变量的值是否一样。

2、引用数据类型:比较的是引用的地址是否相同,比如说新建了两个User对象,比较的是两个User的地址是否一样。

equals()

1.Object里面的equals()方法
比较的也是地址,和“==”效果一样
2.String里面重写了equals()方法
重写后比较的就是 字符串的内容是否一样
在这里插入图片描述
五、常量池
详情分析常量池

常量池分类

常量池大体可以分为:静态常量池,运行时常量池。

1.静态常量池 存在于class文件中,比如经常使用的javap -verbose中,常量池总是在最前面把?

2.运行时常量池呢,就是在class文件被加载进了内存之后,常量池保存在了方法区中,通常说的常量池指的是运行时常量池。所以呢,讨论的都是运行时常量池
在这里插入图片描述

字符串常量池
最最最流行的、最典型的就是字符串了

典型范例:

> String a = "abc"; 
> String b = new String("abc"); 
> System.out.println(a == b);
> 
> 结果:false

这个是第一个需要理解的地方,a指向哪片内存,b又指向哪片内存呢?

对象储存在堆中,这个是不用质疑的,而a作为字面量一开始储存在了class文件中,之后运行期,转存至方法区中。

它们两个就不是同一个地方存储的。知道了它之后我们就可以通过实例直接进一步了解了

实例

   String s1 = "Hello";
    String s2 = "Hello";
    String s3 = "Hel" + "lo";
    String s4 = "Hel" + new String("lo");
    String s5 = new String("Hello");
    String s6 = s5.intern();
    String s7 = "H";
    String s8 = "ello";
    String s9 = s7 + s8;

    System.out.println(s1 == s2);  // true
    System.out.println(s1 == s3);  // true
    System.out.println(s1 == s4);  // false
    System.out.println(s1 == s9);  // false
    System.out.println(s4 == s5);  // false
    System.out.println(s1 == s6);  // true

分析:
1、s1 = = s2 很容易可以判断出来。s1 和 s2 都指向了方法区常量池中的Hello。
2、s1 = = s3 这里要注意一下,因为做+号的时候,会进行优化,自动生成Hello赋值给s3,所以也是true
3、s1 = = s4 s4是分别用了常量池中的字符串和存放对象的堆中的字符串,做+的时候会进行动态调用,最后生成的仍然是一个String对象存放在堆中。
在这里插入图片描述
4、s1 = = s9 在JAVA9中,因为用的是动态调用,所以返回的是一个新的String对象。所以s9和s4,s5这三者都不是指向同一块内存
在这里插入图片描述
5、s1 = = s6 为啥s1 和 s6地址相等呢? 归功于intern方法,这个方法首先在常量池中查找是否存在一份equal相等的字符串如果有的话就返回该字符串的引用,没有的话就将它加入到字符串常量池中,所以存在于class中的常量池并非固定不变的,可以用intern方法加入新的

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值