在我们学习Java的过程中有着许多的小知识点特别容易出bug,你知道吗?下面我就给大家科普下2个学习Java容易忽视的问题

1、值传递与引用传递

值传递是指对象被值传递,意味着传递了对象的一个副本,即使副本被改变,也不会影响源对象。(因为值传递的时候,实际上是将实参的值复制一份给形参。)

public static void main(String[] args) {

int num1 = 10;

int num2 = 20;

swap(num1, num2);

System.out.println("num1 = " + num1);

System.out.println("num2 = " + num2);

}

public static void swap(int a, int b) {

int temp = a;

a = b;

b = temp;

System.out.println("a = " + a);

System.out.println("b = " + b);

}

结果输出:a = 20;b = 10;num1 = 10;num2 = 20

引用传递传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象的改变会反映到实际的对象上。(因为引用传递的时候,实际上是将实参的地址值复制一份给形参。)

public static void main(String[] args) {

int[ ] arr = {1,2,3,4,5};

change(arr);

System.out.println(arr[0]);

}

public static void change(int[] array) {

//将数组的第一个元素变为0

array[0] = 0;

}

//结果输出:0

而还有一个特殊的列子StringBuffer类型传递

public void method() {

StringBuffer str = new StringBuffer("1234");

System.out.println(str);

change(str);

System.out.println(str);

}

public static void change(StringBuffer str) {

str = new StringBuffer("abc");

//str.append("欢迎大家关注");//输出:1234欢迎大家关注

//str.insert(3, "(编程)");//输出:123(编程)4

}

结果:1234;1234。分析:因为在 change方法内部我们是新建了一个StringBuffer对象,所以 str指向了另外一个地址,相应的操作也同样是指向另外的地址的。如

public class Demo {

public static void main(String[] args) {

Person p = new Person("张三");

change(p);

System.out.println(p.name);

}

public static void change(Person p) {

Person person = new Person("李四");

p = person;

}

}

class Person {

String name;

public Person(String name) {

this.name = name;

}

}

最后输出:张三;这是因为change方法中重新创建了一个 Person对象。这些都是很容易出bug的小知识,你Get到了吗?如果学习Java过程中有什么问题可以评论留言,我看到都会回复哦!

java转net容易吗_每日一醒(1):学习Java容易忽视的小错误,你注意到了吗?相关推荐

  1. java虚拟机多久触发垃圾回收_每日一问:讲讲 Java 虚拟机的垃圾回收

    昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前 ...

  2. 用Java代码实现日志记录器_如何在此简单的Java日志记录实现中附加到日志文件? - java...

    我得到了以下用于创建和管理Logger的类.每当执行代码和程序时,都会使用对静态getLogger()捕获块的调用进行记录. public class Log { private static fin ...

  3. java中解密的思想_北大青鸟翔天解密,Java核心思想两大点

    Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少.对核心概念和思想的掌握可以帮助我们举一反三.触类旁通,有助于提升我们对整个J ...

  4. 零基础可以学习java吗_零基础真的可以学习java吗?

    Java是一个比较抽象的开发语言,涉及知识点比较多,如果自学的话,可以按照五个阶段来学习,先学好基础知识,再逐步扩展,由易到难.要注意视频和书本内容相辅相成,切记不要只看视频而不忽略书本基础的知识要点 ...

  5. java面试换背景颜色_实习|渣二本Java菜鸡0 Offer的春招血泪史,一定要主动去找实习呀!

    作者:codingCoge 链接:https://www.nowcoder.com/discuss/177823 来源:牛客网 前言: 一个菜鸡的春招血泪史,共勉 到现在还是0offer 先玄学求一波 ...

  6. java超出gc开销限制_超出了GC开销限制– Java堆分析

    java超出gc开销限制 这篇文章是我们原来的GC开销超出问题模式的延续. 正确的Java堆分析对于消除O​​utOfMemoryError:GC开销问题至关重要. 如果您不熟悉此Java HotSp ...

  7. java能调用python吗_如何使用运行时在Java中调用python程序 - java

    我想用来自Java的参数调用python程序.但是我的输出是空白.代码在这里. Python代码在这里: import sys print(sys.argv[1]) Java代码在这里: public ...

  8. java学生签到系统视频教程_手把手教你做一个Java web学生信息、选课、签到考勤、成绩管理系统附带完整源码及视频开发教程...

    四个阶段的Java web学生信息系统视频教程终于录制完成了,系统用到的知识点有:jsp+servlet+mysql+jquery+ajax,前端采用的是当下最流行的easyui管理框架,全部采用面向 ...

  9. java 存储过程返回结果集_通过SQL“select * from”从java存储过程返回结果集

    我可以直接通过SQL select * from语句从java存储过程(oracle)获取结果吗? 在数据库上,我将有一个java存储过程/函数,当它被调用时返回一个多列,多行结果集. 我想直接通过s ...

最新文章

  1. 【12】行为型-观察者模式
  2. 开始使用vue.js
  3. 利用angular4和nodejs-express构建一个简单的网站(六)—用户模块和路由分析
  4. 在Java中对Singleton类进行双重检查锁定
  5. 谷歌AI的七个“不正经”玩法,个个能玩一整天
  6. OpenGL纹理本质(三)
  7. java删除文件夹或文件
  8. 安利个数据库工具dbeaver
  9. WIFI 2.4G及5G信道一览表
  10. 个人价值:个人价值冰山模型
  11. PointCloud的修修补补
  12. element tree不刷新视图_我不告诉你的话,你不会知道iPad原来也有这么多窍门,学起来...
  13. LabVIEWCNN基础
  14. 前端使用xlsx、file-saver实现自定义excel格式导出(列宽、字体、边框、行高)
  15. webdriver操作frame
  16. 如何在嵌入式 Linux 和物联网中建立信任根
  17. 【一致性仿真】Multi-Agent Consensus Using Both Current and Outdated States
  18. 北京汽车摩托车年检查询指南(工作时间、最近检测厂、联系电话)
  19. -------Python中ConfigArgParse模块介绍---------
  20. springmvc临时不使用视图解析器的自动添加前后缀

热门文章

  1. 微信小程序,引用扩展组件提示“没有找到可以构建的NPM包”
  2. 【BUG记录】> Android dependency ‘androidx.vectordrawable:vectordrawable‘ has different
  3. tensor flow lstm 图像 一条直线_【开源计划】图像配准中变形操作(Warp)的pytorch实现...
  4. NSString、NSArray、NSDic常用方法汇总
  5. OSI七层网络模型浅析
  6. 正确使用stl map的erase方法
  7. Python 开发者在迁移到 Go(lang) 时需要知道哪些事?
  8. Xcode中Info.plist文件各个键的作用说明【搜藏】
  9. IT应聘者的简历应该是怎么样的?
  10. How ASP.NET MVC Works?