查看: 1850| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

Leetcode Binary Tree Path里关于Java StringBuilder 的问题

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
用java做到leetcode的一道简单题,Binary Tree Path有一点卡住了
我的code如下:
  1. public class Solution {
  2.     List<String> result=new ArrayList<String>();
  3.     public List<String> binaryTreePaths(TreeNode root) {
  4.         StringBuilder path=new StringBuilder();
  5.         if(root!=null)
  6.             dfs(root,path);
  7.         return result;
  8.     }
  9.     public void dfs(TreeNode root, StringBuilder path){
  10.         if(root.left==null&&root.right==null){
  11.             path.append(root.val);
  12.             result.add(path.toString());
  13.             return;
  14.         }
  15.         path.append(root.val);
  16.         path.append("->");
  17.         if(root.left!=null){
  18.             dfs(root.left, path));
  19.         }
  20.         if(root.right!=null){
  21.             dfs(root.right,path);
  22.         }
  23.             
  24.     }
  25. }
复制代码
我把一个Stringbuilder (变量名path)做为参数在dfs里面传入,按道理java pass by value,在函数里应该会生成一个新的stringbuilder,原本的stringbuilder不会被修改。结果我的结果是:

Input:[1,2,3]
Output:["1->2","1->23"]
Expected:["1->2","1->3"]


显然原来位置的stringbuilder被修改了。
然后我把dfs(root.left, path) 改成dfs(root.left, new StringBuilder(path)),dfs(root.right, path) 改成dfs(root.right, new StringBuilder(path))就通过了。
实在不是很明白,为什么这里stringbuilder是pass by reference呢?是这个类比较特殊吗?
求大神解答

上一篇:还一年毕业转CS还来得及吗?
下一篇:数组里面有一道简单的题Remove Element
🔗
flyaway25 2015-8-27 10:27:30 | 只看该作者
全局:
实际上java的object传递虽然是pass by value,但是value对的是object的reference,所以很多人直接就说java是pass by reference了。
回复

使用道具 举报

🔗
muybienw 2015-8-27 10:34:10 | 只看该作者
全局:
Java里面传Object都是by reference的,任何修改都会反映在那个Object上。反而比较特殊的是String,虽然是个Object,但是函数传递的时候是by value(类似 primitives),而且任何函数操作都是返回一个修改后的副本。
回复

使用道具 举报

🔗
 楼主| windyL 2015-8-27 10:55:30 | 只看该作者
全局:
明白了。java虽然说是all pass by value但是对于object是copied reference,所以这里还是可以修改原来的object。谢谢楼上的回答。

http://stackoverflow.com/questio ... ce-or-pass-by-value
回复

使用道具 举报

🔗
vivaroma 2015-8-27 16:39:09 | 只看该作者
全局:
回顾下基础知识,java数据类型分为基本型和引用型,引用型指向特定的内存区域。基本型包括6种数值型+字符型+布尔型。引用型包括类、接口和数组。

Stringbuilder在此是一个类,属于引用型,pass by reference
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表