运算符+逻辑运算符+equals+等值比较+装箱机制+字符串对象+强制类型转换

**

运算符

**
分隔符 . [] () , ;

算术运算符: +,―,*,/,%取余,如7/4=1,7%4=3、++,――

关系运算符: >,<,>=,<=,==,!=

布尔逻辑运算符: !,& , | , &&,||

位运算符: &,|,^,~ , >>,<<,>>>

赋值运算符: =

扩展赋值运算符:+=,―=,*=,/=

字符串连接运算符: +

造型操作符:()

**

关系运算符

**

, <, >=, <=, ==, !=

3=5 false 
3!=5 ture

**

== 等值比较和equal比较

**

所有的对象都拥有标识(内存地址)和状态(数据)
同时“= =”比较的是两个对象的内存地址,
在Object的equals方法底层调用的是“= =”号
所以说Object的equals()方法是比较两个对象的内存地址是否相等

equals()与"==" 的区别:

(1)= = 号在比较基本数据类型时比较的是数据的值,而用 = = 号比较两个对象时比较的是两个对象的地址值;

(2)equals()不能用于基本的数据类型,对于基本的数据类型要用其包装类。

(3)默认情况下,也就是从Object继承而来的 equals 方法与 “= =” 是完全等价的,比较的都是对象的内存地址,因为底层调用的是“= =” 号,但我们可以重写equals方法,使其按照我们的需求方式进行比较,如String类(integer,date,file)重写equala()方法,使其比较的是字符的内容,而不再是内存地址。

**

代码实例:

public class Test1 {
	public static void main(String[] args) {
		String str1 = "abc";
		String str2 = "abc";
		System.out.println(str1 == str2);      //true
		System.out.println(str1.equals(str2));  //true
		//相等原因:str1先在方法區創建了abc對象,str2直接調用abc地址,不用再創建。
		
		String str3 = new String("abc");
		String str4 = new String("abc");
		System.out.println(str3 == str4);       //false   不相等原因:str3先在方法區創建對象,再調用對象。
																//str4也在方法區調用對象,但是二者在堆區對象地址不同。
		System.out.println(str3.equals(str4)); //true     String中默认改写equals方法,只比较内容,不比较地址。
	}

**

public class equals {
	public static void main(String[] args) {
		Integer n1 = new Integer(47);
		Integer n2 = new Integer(47);
		System.out.println("n1 == n2 :" + (n1 == n2));// false
		// n1=null;
		System.out.println("n1.equals(n2) :" + n1.equals(n2));// true
		System.out.println("n2.equals(n1) :" + n2.equals(n1));// true
		System.out.println("n1!= n2 :" + (n1 != n2)); // ture
		n1 = 300;
		n2 = 300;// 自动装箱
		System.out.println("***n1 == n2 :" + (n1 == n2));// false
		System.out.println("______________");

		n1 = 100;
		n2 = 100;// 自动装箱
		System.out.println("####n1 == n2 :" + (n1 == n2));// true
		System.out.println("______________");

		int a1, a2;
		a1 = 130;
		a2 = 130;
		System.out.println("a1 == a2 :" + (a1 == a2));// true
		// System.out.println("a1.equals(a2) :" +a1.equals(a2));
		System.out.println("______________");

		String str1;
		str1 = new String("Hello");
		String str2 = new String("Hello");
		// str2=null;
		System.out.println(str1 == str2);// false
		System.out.println("str1的hash地址" + str1.hashCode());// str1的hash地址69609650
		System.out.println("str2的hash地址" + str2.hashCode());// str2的hash地址69609650
		System.out.println("str2.equals(str1) :" + str2.equals(str1));// true
		System.out.println("*************");
		System.out.println(str1 == "Hello");// false
		// str1=null;
		System.out.println("str1.equals( Hello ) :" + str1.equals("Hello"));// true
		System.out.println("Hello.equals(str1) :" + "Hello".equals(str2));// true

	}
}

装箱机制:

n1=300,n1是Integer类型,会自动创建一个新的integer对象,
基本类型300变成integer类型放入n1所指对象的属性里 n1=100,n2=100,
n1会先在常量池内寻找是否有属性值为100的Integer对象,
若没有,就会在常量池里创建一个Integer对 象,开辟属性空间100(没有属性名),方法空间tostring()和equals(),
然后把这个对象的地址给局部变量n1,
到n2的时 候,不会先创建对象,而是在常量池中找到属性值为100的Integer对象,
然后把该对象的地址赋给n2局部变量;

注意:

常量池中村的Integer范围在-128~127内,超出范围就不存在常量池里

创建字符对象:

New string()创建两个对象: 一个在常量池,一个在堆区
堆里的对象用户自己管理;
常量池的对象由虚拟机管理;

强制类型转换

代码实例:

public class Test4 {
	public static void main(String[] args) {
		Test4 t = new Test4();
		t.getRun(3.14);
	}

	public void getRun(double x) {
		int temp = (int)x;//强制类型转换
		
		//要求必须输出一个整数
		System.out.println(temp);
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值