面试总结

1, 值传递和引用传递

在java中是传递的引用,在传递参数到方法的时候,都会拷贝一个引用的副本,在方法内部,如果在方法内部改变是副本的内存指向, 那原来的变量是不会发生改变的,如果改变的是指向地址的值,那原对象就会发生改变。

public class StringTest {

 public static void main(String[] args) {
  String str = "java";
  nochange(str, str);
  change(str, str);
 }
 
 public static void nochange(String str1,String str2) {
  System.out.println("nochange--->>"+(str1 == str2));
 }
 

 public static void change(String str1,String str2) {
  str1 = str1 + "";
  System.out.println("change--->>"+(str1 == str2));
 }
}


结果:

nochange--->>true
change--->>false



网上引用:

很多人说,java中的String虽然是对象,但是具有值类型的特征。他是值传递,传递的值。
我认为这这种说法完全是错误的。
String和普通对象毫无区别,和其他对象一样,传递的是引用,而不是值。
一段String的运用代码:

 String a = "123";
public void change(String a){
    a = "234";
}

很多人会说,a的值没有变,是因为String是值传递,问题是,就算对于一个普通对象,这样的用法,该对象的值也是不会改变的!这是一个大大的误区。java中根本没有真正的引用传递,不想C#中有ref关键字!
比如:

 Person p = new Person("张三");
public void change(Person p){
    p = new Person("李四");
}

上面对于String的使用和这个自定义Person类的使用上,根本没有本质上的区别。同样,外面的p变量依然是”张三”,不会是“李四。”

同样的代码,放入C#中,加上ref关键字:

 Person p = new Person("张三");
public void Change(ref Person p){
    p = new Person("李四");
}

结果是,p变为了“张三”!

所以说,个人认为java中的String并没有什么特殊性,和其他类一样,同样保存的对象的引用,传递的引用。唯一的特殊性,就是可以直接用“”双引号的方式创建字符串对象。



2, android中多线程,  多进程之间的通信?






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值