java转net容易吗_每日一醒(1):学习Java容易忽视的小错误,你注意到了吗?
在我们学习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容易忽视的小错误,你注意到了吗?相关推荐
- java虚拟机多久触发垃圾回收_每日一问:讲讲 Java 虚拟机的垃圾回收
昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前 ...
- 用Java代码实现日志记录器_如何在此简单的Java日志记录实现中附加到日志文件? - java...
我得到了以下用于创建和管理Logger的类.每当执行代码和程序时,都会使用对静态getLogger()捕获块的调用进行记录. public class Log { private static fin ...
- java中解密的思想_北大青鸟翔天解密,Java核心思想两大点
Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少.对核心概念和思想的掌握可以帮助我们举一反三.触类旁通,有助于提升我们对整个J ...
- 零基础可以学习java吗_零基础真的可以学习java吗?
Java是一个比较抽象的开发语言,涉及知识点比较多,如果自学的话,可以按照五个阶段来学习,先学好基础知识,再逐步扩展,由易到难.要注意视频和书本内容相辅相成,切记不要只看视频而不忽略书本基础的知识要点 ...
- java面试换背景颜色_实习|渣二本Java菜鸡0 Offer的春招血泪史,一定要主动去找实习呀!
作者:codingCoge 链接:https://www.nowcoder.com/discuss/177823 来源:牛客网 前言: 一个菜鸡的春招血泪史,共勉 到现在还是0offer 先玄学求一波 ...
- java超出gc开销限制_超出了GC开销限制– Java堆分析
java超出gc开销限制 这篇文章是我们原来的GC开销超出问题模式的延续. 正确的Java堆分析对于消除OutOfMemoryError:GC开销问题至关重要. 如果您不熟悉此Java HotSp ...
- java能调用python吗_如何使用运行时在Java中调用python程序 - java
我想用来自Java的参数调用python程序.但是我的输出是空白.代码在这里. Python代码在这里: import sys print(sys.argv[1]) Java代码在这里: public ...
- java学生签到系统视频教程_手把手教你做一个Java web学生信息、选课、签到考勤、成绩管理系统附带完整源码及视频开发教程...
四个阶段的Java web学生信息系统视频教程终于录制完成了,系统用到的知识点有:jsp+servlet+mysql+jquery+ajax,前端采用的是当下最流行的easyui管理框架,全部采用面向 ...
- java 存储过程返回结果集_通过SQL“select * from”从java存储过程返回结果集
我可以直接通过SQL select * from语句从java存储过程(oracle)获取结果吗? 在数据库上,我将有一个java存储过程/函数,当它被调用时返回一个多列,多行结果集. 我想直接通过s ...
最新文章
- 【12】行为型-观察者模式
- 开始使用vue.js
- 利用angular4和nodejs-express构建一个简单的网站(六)—用户模块和路由分析
- 在Java中对Singleton类进行双重检查锁定
- 谷歌AI的七个“不正经”玩法,个个能玩一整天
- OpenGL纹理本质(三)
- java删除文件夹或文件
- 安利个数据库工具dbeaver
- WIFI 2.4G及5G信道一览表
- 个人价值:个人价值冰山模型
- PointCloud的修修补补
- element tree不刷新视图_我不告诉你的话,你不会知道iPad原来也有这么多窍门,学起来...
- LabVIEWCNN基础
- 前端使用xlsx、file-saver实现自定义excel格式导出(列宽、字体、边框、行高)
- webdriver操作frame
- 如何在嵌入式 Linux 和物联网中建立信任根
- 【一致性仿真】Multi-Agent Consensus Using Both Current and Outdated States
- 北京汽车摩托车年检查询指南(工作时间、最近检测厂、联系电话)
- -------Python中ConfigArgParse模块介绍---------
- springmvc临时不使用视图解析器的自动添加前后缀
热门文章
- 微信小程序,引用扩展组件提示“没有找到可以构建的NPM包”
- 【BUG记录】> Android dependency ‘androidx.vectordrawable:vectordrawable‘ has different
- tensor flow lstm 图像 一条直线_【开源计划】图像配准中变形操作(Warp)的pytorch实现...
- NSString、NSArray、NSDic常用方法汇总
- OSI七层网络模型浅析
- 正确使用stl map的erase方法
- Python 开发者在迁移到 Go(lang) 时需要知道哪些事?
- Xcode中Info.plist文件各个键的作用说明【搜藏】
- IT应聘者的简历应该是怎么样的?
- How ASP.NET MVC Works?