第3章:操作符

在最底层,java中的数据是通过使用操作符来操作的

  • 操作符优先级:先乘除后加减.
  • 赋值:Test类非常简单,它的两个实例t1和t2.当将t2赋值给t1的时候,接着又修改t1,因为赋值操作的是一个对象的引用,所以修改t1的时候也改变了t2的值.这是由于t1和t2包含的是相同的引用,他们指向相同的对象(原本t1包含的对象的引用,是指向一个值为9的对象.在对t1赋值的时候.这个引用被覆盖,也就是丢失了;会被垃圾回收器自动清理) 这种特殊的现象通常称为”别名现象”,是java操作对象的一种基本方式.在这个例子中想要避免别名问题可以这么写t1.level=t2.level,这样可以保持2个对象的独立性,而不是将t1和t2绑定到相同的对象.
public class Test {
    int level;
    public static void main(String[] args) {
        Test t1 = new Test();
        Test t2 = new Test();
        t1.level = 9;
        t2.level = 47;
        System.out.println(t1.level + "===" + t2.level);//9===47
        t1=t2;
        System.out.println(t1.level + "===" + t2.level);//47===47
        t1.level=27;
        System.out.println(t1.level + "===" + t2.level);//27===27
    }
}
  • 自动递增和递减:++a 前缀递增表示操作符位于变量或者表达式的前面 与a++后缀递增操作符位于变量或者表达式的后面.
    前缀递增和递减:会先执行运算,在生成值.
    后缀递增和递减:会先生成值,再执行运算.
public class Test {
    public static void main(String[] args) {
       int i=1;
        System.out.println(i);//1
        System.out.println(++i);//2
        System.out.println(i++);//2
        System.out.println(i);//3
        System.out.println(--i);//2
        System.out.println(i--);//2
        System.out.println(i);//1
    }
}
  • 关系操作符:
    关系操作符==和!=也适用于所有对象,但这两个操作符比较的是对象的引用.
    public static void main(String[] args) {
     Integer n1= new Integer(47);
     Integer n2= new Integer(47);
        System.out.println(n1==n2);//false
        System.out.println(n1!=n2);//true
    }

如果想要比较两个对象的实际内容是否相同,可以使用equals() 但这个方法不适用于基本类型,基本类型直接使用==或!=即可

    public static void main(String[] args) {
     Integer n1= new Integer(47);
     Integer n2= new Integer(47);
        System.out.println(n1.equals(n2));//true
    }

假设你创建了自己的类,就像下面的结果:事情变得令人费解结果又是false这是由于equals()默认行为是比较引用.所以除非在自己的新类中覆盖equals()方法,否则不可能表现出我们希望的行为

public class Test {
    int i;
    public static void main(String[] args) {
        Test v1 = new Test();
        Test v2 = new Test();
        v1.i = v2.i = 10;
        System.out.println(v1.equals(v2));//false
    }
}

当覆盖equals()后得到的结果是 true

public class Test {
    int i;

    public static void main(String[] args) {
        Test v1 = new Test();
        Test v2 = new Test();
        v1.i = v2.i = 10;
        System.out.println(v1.equals(v2));//true
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Test)) return false;

        Test test = (Test) o;

        return i == test.i;
    }
}
  • 逻辑运算符:
    当使用逻辑运算符的时候,我们会遇到一种短路现象.即一旦能够准确无误的确定整个表达式的值,就不会再计算余下的表达式.因此整个表达式靠后的部分有可能不会被计算.

  • 直接常量:如果在程序中使用直接常量,编译器可以准确的知道要生成什么样的类型,但有时候也是模棱两可的.如果发生这种情况必须对编译器加以指导,用与直接常量相关的某些字符来额外增加一些信息.后缀添加标识符L代表long,F代表float,D代表double.

  • 按位操作符:按位操作符用来操作整数,基本数据类型中的单个比特(bit)即二进制位.按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果.
  • 类型转换:在执行向下转型(窄化转换)的操作,也就是说将能容纳更多信息的数据类型转换成无法容纳那么多信息类型的时候就面临丢失数据的危险.这时候最好进行显式的转换.在执行向上转型(扩展转换)则不必显式转换.
    在执行窄化转化时,必须要注意截尾与舍入的问题.例如将92.7转换成int变成92,因此将float或double转换成int的时候,总是对该数字执行截尾,如果想要四舍五入.就需要使用java.lang.Math的round()发法.
    提升:如果对基本数据类型执行算数运算或按位运算,大家会发现,只要类型比int小(即char byte或short)那么在运算之前,这些值都会自动转换成int,这样一来生成的结果就是int.如果将一个float和一个double值相乘,结果就是double;将一个int和一个long值相加结果就是long.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值