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

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

f2e089beae0daa872b20c92f0744ab74.png

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过程中有什么问题可以评论留言,我看到都会回复哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值