关于java中值传递的总结
来源:互联网 发布:登录mysql命令 编辑:程序博客网 时间:2024/06/03 03:39
有网友说道:在java里没有引用传递,只有值传递。但是“引用传递”字眼总是出现。为什么呢?
其实两个说法其中的原理是一样的,只要咱们懂得其中的原理,那么至于叫什么也就无所谓了。毕竟计算机也不认识汉字。
java中创建并初始化一个String对象,最常见的方式有两种:
String str=new String("XXX");String str="XXX";
前者是java中标准的对象创建方式,其创建的对象将直接放置到堆中,每调用一次就会创建一个新的对象;后者则会在栈中创建一个对象引用变量str,然后 查看字符串池中是否存在"XXX",如果没有,则将"XXX"存放字符串池,并令引用变量str指向它;如果已经有"XXX",则直接令str指向它。这样充分利用 了栈的数据共享优点,当然也可能是一个陷阱,对象很有可能没有创建,只不过指向一个先前已经创建的对象;而new()方法则能保证每次都创建一个新的对 象。
下述代码展示了二者的不同:
Java代码
public class Main {
public static void main(String[] args) {
String strA = "abc";
String strB = "abc";
String strAA = new String("abc");
String strBB = new String("abc");
System.out.println(strA == strB);
System.out.println(strAA == strBB);
}
}
输出结果:
true
false
字符串限定是指String s = “abc”这种形式,也就是说String s1 = “abc”;
s 和 s1 都是指向同一个内存地址
String s = "abc";
这句是定义一个String变量s,jvm会先去字符串池中找有没有"abc",有的话就把s指向"abc",没有就会先在池中创建一个,再让s指向"abc"。
String s = new String("abc");
这句是先定义一个String变量s,然后在内存中分配新的空间"abc"再让s指向这个内存地址
那么问题来了:
public class Example {
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}
}
答案是:good and gbc
阅读全文
0 0
- 关于java中值传递的总结
- 关于C++中值传递和引用传递的总结
- 关于Java中值传递和引用传递的一点思考
- java中值传递的详解
- C++中值传递、指针传递、引用传递的总结
- C++中值传递、指针传递、引用传递的总结
- C++中值传递、指针传递、引用传递的总结
- C++中值传递、指针传递、引用传递的总结
- C++中值传递、指针传递、引用传递的总结
- C++中值传递、指针传递、引用传递的总结
- C++中值传递、指针传递、引用传递的总结
- C++中值传递、指针传递、引用传递的总结
- C++中值传递、指针传递、引用传递的总结
- 关于python中值传递和引用传递的问题
- Java中值传递
- Java中值传递探讨
- Java 中值传递问题
- java中值传递解析
- 指南 | 独立开发者如何才能挣挣挣挣到钱?
- equals与hashcode
- 自定义多样式页签控制视图组件SYPageControl
- kafka
- Yii2.0 发送邮件
- 关于java中值传递的总结
- 在Ubuntu上配置TensorFlow,Eclipse+PyDev遇到的问题
- Android获取UUID(可变+不变)
- spring boot热部署
- 一道考查对象模型的C++笔试题
- python在pandas.DataFrame添加一行
- java ==和equals
- Java字节流与和字符流区别之分
- 修改CheckBox选择框、设置选择框颜色