java是不是把所有数组和 类(class) 都放在 堆,而不是 栈 里面? RT貌似java操作这两种数据都用 new的对吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还有,java不能使用 引用 作为函数形参? 最近刚看java,学习中 引用不能作为函数形参?那java能做什么呢 ,你刚刚学java,但你注意main方法没?public static void main(String args[]) 这里面的参数不是引用类型(除基本类型(byte、short、int、long、float、double、boolean)以外的类型)吗。 【说错的话,请指出,谢谢】一些被标注为final的类型,可以将引用作为形参传入 比如下面的代码public class Test { private static void test(String s) { s = s.concat("123"); } private static void test2(StringBuilder sb) { sb.append("123"); } public static void main(String[] args) { String t = "hello"; test(t); System.out.println(t); StringBuilder sb = new StringBuilder("hello"); test2(sb); System.out.println(sb.toString()); }}输出结果是hellohello123因为String是final的,不可被修改,所以传入函数后不能修改,无法影响到函数外部StringBuilder则不同,函数内部对它的修改会直接影响到堆中的对象 java每实例化一个对象,将其放在一个堆里面;堆是栈的一个单元,数组在内存里面是一个栈,实例化一个数组就是实例化多个堆放入一个栈里面。 你这个例子我说什么好…… private static void test(String s) { s = s.concat("123"); } private static void test2(StringBuilder sb) { sb.append("123"); }一个是用 “=” 直接改变了引用指向的对象一个是调用了某引用的方法,改变其指向的对象的某个属性这个能比的嘛? String a = "aaa";楼主这时候a对象是在栈中 http://blog.csdn.net/mengxiangyue/article/details/6816186楼主看看会对你有帮助的 你自己试一下把你的函数改成如下之后的结果,再考虑下你的这个例子举的是否恰当 private static void test(String s) { s = null; } private static void test2(StringBuilder sb) { sb = null; }java 方法的参数传递进去的是引用值在函数内部如果让引用重新指向另一个对象是不会改变原引用指向的对象的但是如果你改变的是原引用指向的对象的属性的话,这个对象属性上的变化肯定会保留下来的Sting 没法在不改变指向对象的情况下改变其“字符串值”属性的原因是:Sting 类没有提供一个改变其“字符串值”属性的方法 以上例子完全说明不了什么,String和stringbuffer或者stringbuilder这些都只不过是javase中api一个区别的知识点,感觉有点答非所问http://zhanhao.iteye.com/blog/1174430这个链接可以看看,对堆栈解说的比较详细 那为何 普通的整形变量 不是用new? 而数组和 类(class)是用new?难道普通整形变量就不托管了? String类不能改变字符串的值是因为在String类的定义中,char[]字符数组被定义为final char[] 为 final不代表 这个 char 数组的每一个元素都是 final虽然不能改变 char[] 的值但是可以改变每个 char 的值如果 java 愿意完全可以提供一个 api 来依次改变这个 char[] 中每一个 char 的值下面的语句是完全合法的: final char[] value = new char[10]; value[0] = 'a'; value[0] = 'b'; javamail 读取邮件内容时为什么邮件中的html内容读取不到? 关于JTextArea在一个循环中,如何使用鼠标事件监听的问题 求最大公共子串的一个小错误 JButton经过继承之后怎样才能直接显示出来? 從as2.0想學 java 有人懂crystal clear的模版吗? drawLine画虚线? 使用Calendar问题,少了一个月 我想用java编一个收发邮件的程序,怎么办? 怎样动手做java程序 Java中关于抽象类的使用的疑惑,求高手解答 理解老师代码时遇到的一个问题:编写学生成绩计算类,计算学生平均分 ...
【说错的话,请指出,谢谢】一些被标注为final的类型,可以将引用作为形参传入 比如下面的代码public class Test { private static void test(String s) {
s = s.concat("123");
}
private static void test2(StringBuilder sb) {
sb.append("123");
}
public static void main(String[] args) {
String t = "hello";
test(t);
System.out.println(t);
StringBuilder sb = new StringBuilder("hello");
test2(sb);
System.out.println(sb.toString());
}
}
输出结果是
hello
hello123因为String是final的,不可被修改,所以传入函数后不能修改,无法影响到函数外部
StringBuilder则不同,函数内部对它的修改会直接影响到堆中的对象
堆是栈的一个单元,数组在内存里面是一个栈,实例化一个数组就是实例化多个堆放入一个栈里面。
你这个例子我说什么好…… private static void test(String s) {
s = s.concat("123");
}
private static void test2(StringBuilder sb) {
sb.append("123");
}一个是用 “=” 直接改变了引用指向的对象
一个是调用了某引用的方法,改变其指向的对象的某个属性
这个能比的嘛?
楼主这时候a对象是在栈中
http://blog.csdn.net/mengxiangyue/article/details/6816186
楼主看看会对你有帮助的
你自己试一下把你的函数改成如下之后的结果,再考虑下你的这个例子举的是否恰当 private static void test(String s) {
s = null;
}
private static void test2(StringBuilder sb) {
sb = null;
}java 方法的参数传递进去的是引用值
在函数内部如果让引用重新指向另一个对象
是不会改变原引用指向的对象的但是如果你改变的是原引用指向的对象的属性的话,
这个对象属性上的变化肯定会保留下来的Sting 没法在不改变指向对象的情况下改变其“字符串值”属性的原因是:
Sting 类没有提供一个改变其“字符串值”属性的方法
http://zhanhao.iteye.com/blog/1174430这个链接可以看看,对堆栈解说的比较详细
char[] 为 final
不代表 这个 char 数组的每一个元素都是 final
虽然不能改变 char[] 的值
但是可以改变每个 char 的值
如果 java 愿意
完全可以提供一个 api 来依次改变这个 char[] 中每一个 char 的值
下面的语句是完全合法的:
final char[] value = new char[10];
value[0] = 'a';
value[0] = 'b';