s+=1 和 s=s+1看了这篇,你会明白好多自己不知道的(对小白)

本文详细讲解了在Java中`s+=1`和`s=s+1`的区别,涉及类型隐式转换、短整型溢出和常量池优化,同时探讨了错误案例和正确用法。重点在于理解类型转换规则及避免潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

s+=1和s=s+1区别

  • 下面的代码会报错,知道为什么么?
	short s = 1;
    s = s + 1;

因为:1是int型,s+1会自动将s转化为int型进行运算,结果就是int型,

果将int直接赋值给short会报错,高到第的转化需要强转.

  • 正确的写成下面这样
		//注意加两个括号
		short s = 1;
        s = (short) (s + 1);
  • 如果改成这样会对么?
    short s = 1;
    s = s + (short)1;
  • 告诉你这样也是错的,为什么呢?(记住就行)
  1. JAVA中short和short相加自动转化为int
  2. 精度小于int的数值运算的时候都回被自动转换为int后进行计算
  • 下面的也可以,那么问题来了,这个为啥这样可以?
//这样也可以实现s加1;更为简单 	
short s = 1;
        s+=1;
  1. s += 1是等价于 s = (s的数据类型)(s + 1)
  2. 对于+= -=,*=等系统会自动执行类型转换操作
  3. 更深层次涉及到jvm如何实现(实话说我还不够格,以后回来补上的)
  • 下面的代码不报错,这不是int转short么,为什么?
short s = 1 + 2;
  1. 因为你要知道常量池优化:在给变量进行赋值的时候,如果左边全是常量,没有任何变量的时候,那么java的编译器会直接计算右边的结果,然后赋值给左边变量,相当于short s=3;如果常量运算的值超过范围就会报编译错误.

可以看看这个链接,写的非常明白

  • 想要再深入细节的可以自己搜,后期会把虚拟机实现方式补下.
<think>嗯,用户想让我用通俗易懂的方式解释面向对象。首先,我需要确定用户的基础。可能是一个刚开始学编程的新手,或者是对这个概念太清楚的非技术人员。所以得用生活中的例子,避免专业术语。 面向对象的核心是类对象,这两个概念对新手来说可能比较抽象。得找个常见的类比。比如用“狗”作为类,具体的狗如“我的宠物狗小白”作为对象。这样用户容易联想到属性方法,比如颜色、品种是属性,叫、跑是方法。 接下来要讲四大特性:封装、继承、多态、抽象。每个都需要简单的例子。比如手机作为封装,用户需要知道内部电路,只用按键;继承可以用家族继承,比如孩子继承父母的特征;多态可以是同一方法同表现,比如同动物的叫声;抽象可能有点难,可以比喻为遥控器的按钮,知道内部怎么工作。 用户可能混淆类对象,或者明白为什么需要面向对象。需要强调模块化重用性,比如乐高积木,每个积木是一个类,可以重复使用搭建同结构。这样能帮助用户理解代码的可维护性扩展性。 还要考虑用户可能的疑问,比如面向过程面向对象的区别。比如做饭的例子,面向过程是步骤,面向对象是各个工具协作。这样对比更清晰。 最后,总结要简洁,用比喻加强记忆,比如把面向对象比作工厂生产线,每个环节各司其职。确保用户听完后能有一个整体的理解,而是零散的概念。</think>这里用做菜过程理解面向对象编程: --- ### **面向对象四大特征** ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5c3c8c3c0c0c4d4dbd5f8e1d9e7a3b3c~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=600&h=400&s=112984&e=png&b=f5f5f5) #### **1. 类与对象(Class & Object)** 👉 **比喻**:菜谱具体菜品 - 菜谱(类):规定宫保鸡丁需要鸡丁、花生、酱料等原料(属性) - 具体菜品(对象):根据菜谱实际做出的三盘宫保鸡丁(实例化) - 每盘菜的咸淡可能同(对象属性差异) #### **2. 封装(Encapsulation)** 👉 **比喻**:智能电饭煲 - 内部有加热控制程序(私有方法) - 用户只需按键选择煮饭模式(公有接口) - 无需了解温度传感器如何工作(隐藏实现细节) #### **3. 继承(Inheritance)** 👉 **比喻**:连锁餐厅 - 总店制定标准菜单(父类) - 分店在基础菜单上增加本地特色菜(子类扩展) - 所有分店自动获得总店的招牌菜(方法继承) #### **4. 多态(Polymorphism)** 👉 **比喻**:万能充电器 - Type-C接口(统一方法名) - 给手机充电(调用手机充电方法) - 给笔记本充电(调用笔记本充电方法) - 同设备充电逻辑同(方法重写) --- ### **面向过程 vs 面向对象** ```mermaid graph LR A[做番茄炒蛋] --> B[面向过程] A --> C[面向对象] B -->|步骤| D[洗番茄→切块→打蛋→炒制...] C -->|协作| E[番茄对象+鸡蛋对象+锅具对象] ``` --- ### **生活中的OOP案例** #### **1. 快递系统** ```python class 快递员: def 派件(self, 包裹): print(f"配送{包裹.单号}") class 包裹: def __init__(self, 重量, 收件人): self.重量 =重量 self.收件人=收件人 顺丰小哥 = 快递员() 我的快递 = 包裹(2.5, "张三") 顺丰小哥.派件(我的快递) ``` #### **2. 自动售货机 - **商品类**:价格、库存量 - **支付接口**:支持现金/扫码 - **出货机制**:检查库存→扣款→弹出商品 --- ### **新手常见误区** 1. **过度设计**:像用航天飞机零件造自行车(简单功能强行用设计模式) 2. **继承滥用**:硬说挖掘机是电饭煲的子类(合理继承关系) 3. **忽略封装**:像把微波炉电路板暴露在外(随意修改对象内部状态) --- ### **代码进化示例** #### **原始写法(面向过程)** ```python length = 5 width = 3 height = 2 volume = length * width * height ``` #### **面向对象写法** ```python class 长方体: def __init__(self, 长, 宽, 高): self.长 = 长 self.宽 = 宽 self.高 = 高 def 计算体积(self): return self.长 * self.宽 * self.高 我的箱子 = 长方体(5, 3, 2) print(我的箱子.计算体积()) ``` --- ### **开发者的收获** 1. **模块化**:像乐高积木搭建系统 2. **可维护性**:修改微波炉电路影响使用界面 3. **复用性**:咖啡机模块可以直接用在奶茶机上 4. **扩展性**:给无人机增加送货功能影响飞行控制 通过把现实世界的事物转化为代码中的对象,就像用数字积木搭建虚拟世界,这就是面向对象编程的魅力所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值